Skip to content

staff.symbols ​

16 methods on staff.symbols. Each returns the answer's data and throws NoviqaError on a failed answer.

list ​

GET/admin/v1/symbols

List symbols

One page of symbols, ordered by name (case-insensitive). Symbols are platform-wide: every caller sees all of them. sessions and margin_rates are not filled in the list; read one symbol for them. total counts every symbol matching the filters; page is 1-based (default 1). limit defaults to 100; a value outside 1..500 also falls back to 100.

More details

Rights: the staff member needs at least one of: config.symbols, symbols.quick_edit.

Parameters
searchstring · query
Part of the name or description, case-insensitive.
pathstring · query
Only symbols inside this folder (at any depth), e.g. Forex\Majors; case-insensitive.
statusstring · query
Only symbols with this status.
active archived
calc_typestring · query
Only symbols with this calculation type.
forex forex_no_leverage cfd cfd_leverage cfd_index futures
pageinteger · query
1-based page number; default 1.
limitinteger · query
Rows per page; default 100.
Returns
Promise<symbolPage>
The answer's data.
Errors
400invalid_input: invalid input
401auth.session_expired: session expired, sign in again
403auth.invalid_terminal: this terminal cannot be used here
403auth.otp_enrol_required: your group requires one-time codes: set them up to continue
403auth.password_change_required: you must change your password first
403forbidden: you do not have access to this action
500internal: something went wrong
ts
import { staff } from "@/lib/noviqa"

const data = await staff.symbols.list({
  search: "string",
  path: "string",
  status: "active"
})
bash
curl -X GET "$NOVIQA_API_URL/admin/v1/symbols?search=string&path=string&status=active" \
  -H "Authorization: Bearer $NOVIQA_TOKEN"
json
{
  "success": true,
  "code": "ok",
  "message": "done",
  "data": {
    "items": [
      {
        "allow_negative_prices": true,
        "allowed_expirations": [
          "string"
        ],
        "allowed_fill_policies": [
          "string"
        ],
        "allowed_order_types": [
          "string"
        ],
        "background_color": "string",
        "base_currency": "string",
        "base_currency_digits": 1,
        "basis_symbol": "string",
        "book_depth": 1,
        "calc_type": "forex",
        "category": "string",
        "cfi_code": "string"
      }
    ],
    "page": 1,
    "total": 1
  },
  "request_id": "5b7f2c1e"
}
ts
staff.symbols.list(query?: { search?, path?, status?, calc_type?, page?, limit? }, options?: RequestOptions): Promise<http.symbolPage>

create ​

POST/admin/v1/symbols

Create a symbol

Adds a symbol. Required: name (1-32 letters, digits, spaces or . _ & #), path (up to 8 sections joined by , each 1-64 letters, digits, spaces or . _ & # -, at most 255 characters, the last section equal to the name, e.g. Forex\Majors\EURUSD), base_currency and profit_currency (2-16 capital letters or digits). Every other field left out takes a safe default: a forex contract of 100000 with 5 digits, Monday-Friday 24-hour quote and trade sessions, all order types, volume 0.01-1000 step 0.01, margin rates 1 for buy and sell and 0 for pending orders, swaps in points. tick_size left out (0) becomes one point; margin_currency left out becomes the base currency. id, status (always active) and version (always 1) are set by the server. Unknown fields are refused. Validation returns the first broken rule, e.g. tick size must be a multiple of the point, volume min a multiple of volume step, margin_rates must list each margin kind once, sessions of the same kind and day must not overlap. A name or path already used answers conflict; a quote_source_id that does not exist answers invalid_input. Answers the stored symbol. Writes a config line to the journal and bumps the configuration version, so the trading services reload the symbol within moments.

More details

Rights: the staff member needs every one of: config.symbols.

Request body
allow_negative_pricesboolean
e.g. some futures and spreads
allowed_expirationsstring[]
allowed_fill_policiesstring[]
allowed_order_typesstring[]
background_colorstring
#RRGGBB shown behind the symbol in lists; empty = none
base_currencystring
base_currency_digitsinteger
Rounding used when converting into each currency.
basis_symbolstring
the underlying instrument, for a derivative
book_depthinteger
market depth levels, 0 = off
calc_typeCalcType
CalcType is the formula family for margin, profit and swaps.
forex forex_no_leverage cfd cfd_leverage cfd_index futures
categorystring
cfi_codestring
ISO 10962 classification of financial instruments
chart_priceChartPrice
ChartPrice is the price that draws charts and history.
bid last
contract_sizestring
Exact decimal as a string. Never parse it into a binary float for money or prices.
countrystring
created_atstring
UTC time, RFC 3339.
currency_margin_ratestring
MOEX FORTS currency risk percentage; stored, FORTS calculation is not implemented Exact decimal as a string. Never parse it into a binary float for money or prices.
day_stats_from_feedboolean
take open/high/low from the feed
depth_of_market_queue_volumeinteger
volume shown per book level, 0 = off
descriptionstring
digitsinteger
exchangestring
execution_typeExecutionType
ExecutionType says how orders on a symbol are filled.
instant request market exchange
fast_confirmation_of_requotesboolean
request execution: skip the dealer round-trip on a fast requote
filter_discard_ptsinteger
filter_gap_ptsinteger
filter_gap_ticksinteger
filter_hard_ptsinteger
filter_hard_ticksinteger
filter_soft_ptsinteger
Price filters in points (ticks = how many in a row confirm a move); 0 = off.
filter_soft_ticksinteger
filter_spread_max_ptsinteger
filter_spread_min_ptsinteger
fixed_spreadinteger
points, 0 = floating
freeze_level_ptsinteger
gap_modeGapMode
GapMode says how a chart shows the price jump when trading resumes after a break. - show: the gap is drawn as-is - fill_previous_close: the chart is stitched to the previous close
show fill_previous_close
hedged_margin_larger_legboolean
idinteger
industrystring
instant_max_age_secinteger
instant_max_loss_dev_ptsinteger
instant_max_profit_dev_ptsinteger
instant_max_volumestring
bigger orders go to a dealer, 0 = no limit Exact decimal as a string. Never parse it into a binary float for money or prices.
international_namestring
isinstring
Descriptive only; shown to traders, never used in calculations.
keep_rejected_ticksboolean
store ticks the filters refused
liquidity_margin_ratestring
exchange collateral share; stored, exchange valuation is not implemented Exact decimal as a string. Never parse it into a binary float for money or prices.
margin_check_on_executionboolean
additional check after dealer/provider confirmation; activation is always checked
margin_check_on_stopsboolean
check when stop loss / take profit fills
margin_currencystring
margin_currency_digitsinteger
margin_exclude_open_profitboolean
ignore floating profit in free margin
margin_hedgedstring
Exact decimal as a string. Never parse it into a binary float for money or prices.
margin_initialstring
Exact decimal as a string. Never parse it into a binary float for money or prices.
margin_maintenancestring
Exact decimal as a string. Never parse it into a binary float for money or prices.
margin_ratesMarginRate_input[]
margin_recalc_dailyboolean
recalculate at the day change
maximum_pricestring
the day's upper price limit Exact decimal as a string. Never parse it into a binary float for money or prices.
minimum_pricestring
the day's lower price limit Exact decimal as a string. Never parse it into a binary float for money or prices.
namestring
order_lifetimeOrderLifetime
OrderLifetime says what happens to pending orders and stops at the day change.
until_cancelled today_with_stops today_without_stops
page_urlstring
pathstring
where it sits in the tree and ends with the name, e.g. Forex\Majors\EURUSD
profit_by_market_priceboolean
forex: convert profit at the market bid/ask, not the deal price
profit_currencystring
profit_currency_digitsinteger
quote_source_idinteger
explicit source symbol; overrides all datafeed translations and symbol masks; nil restores feed mapping
quote_subscription_delay_secinteger
delay before a terminal's live quotes, 0 = none
quote_timeout_secinteger
request_needs_confirmationboolean
Request execution: the client confirms the dealer's price once more.
request_timeout_secinteger
sectorstring
sessionsSession_input[]
settlement_pricestring
Exchange and futures only; 0 = unset. the exchange's official close, used to value open positions Exact decimal as a string. Never parse it into a binary float for money or prices.
signals_enabledboolean
splice_typeSpliceType
SpliceType says how a futures chart is joined across a contract rollover. - none: each contract's own prices, no adjustment - close_and_reopen: close the old contract and start a fresh chart - price_adjustment: shift older prices so the join has no gap
none close_and_reopen price_adjustment
spread_ask_shiftinteger
spread_bid_shiftinteger
statusSymbolStatus
SymbolStatus is the life-cycle of a symbol.
active archived
stops_level_ptsinteger
stream_quotesboolean
Quote handling in the market data service. false stops publishing prices
swap_days_per_yearinteger
swap_longstring
Exact decimal as a string. Never parse it into a binary float for money or prices.
swap_multipliersstring[]
Sunday..Saturday
swap_shortstring
Exact decimal as a string. Never parse it into a binary float for money or prices.
swap_typeSwapType
SwapType says how the overnight charge is computed. - reopen_close_price: close and reopen the position at the close price - reopen_bid: close and reopen at the current bid
points base_currency margin_currency profit_currency deposit_currency percent_current_price percent_open_price reopen_close_price reopen_bid
swaps_enabledboolean
swaps_on_holidaysboolean
charge holidays on the next trading day
tick_sizestring
Exact decimal as a string. Never parse it into a binary float for money or prices.
tick_valuestring
Exact decimal as a string. Never parse it into a binary float for money or prices.
trade_accessTradeAccess
TradeAccess says what trading a symbol allows.
disabled long_only short_only close_only full
trading_ends_atstring
UTC time, RFC 3339.
trading_starts_atstring
A contract trades only inside its life (futures expire); nil = no limit. UTC time, RFC 3339.
updated_atstring
UTC time, RFC 3339.
versioninteger
volume_limitstring
0 = unlimited Exact decimal as a string. Never parse it into a binary float for money or prices.
volume_maxstring
Exact decimal as a string. Never parse it into a binary float for money or prices.
volume_minstring
Exact decimal as a string. Never parse it into a binary float for money or prices.
volume_stepstring
Exact decimal as a string. Never parse it into a binary float for money or prices.
Returns
Promise<Symbol>
The answer's data.
Errors
400invalid_input: invalid input
401auth.session_expired: session expired, sign in again
403auth.csrf_invalid: request refused: reload the page and try again
403auth.invalid_terminal: this terminal cannot be used here
403auth.otp_enrol_required: your group requires one-time codes: set them up to continue
403auth.password_change_required: you must change your password first
403forbidden: you do not have access to this action
409conflict: already exists
500internal: something went wrong
ts
import { staff } from "@/lib/noviqa"

const data = await staff.symbols.create({
  base_currency: "EUR",
  calc_type: "forex",
  contract_size: "100000",
  description: "Euro vs US Dollar",
  digits: 5,
  execution_type: "market",
  name: "EURUSD",
  path: "Forex\\Majors\\EURUSD",
  profit_currency: "USD",
  swap_long: "-6.5",
  swap_short: "1.2",
  trade_access: "full",
  volume_max: "100",
  volume_min: "0.01",
  volume_step: "0.01"
})
bash
curl -X POST "$NOVIQA_API_URL/admin/v1/symbols" \
  -H "Authorization: Bearer $NOVIQA_TOKEN" \
  -H "Content-Type: application/json" \
  --data-raw '{
  "base_currency": "EUR",
  "calc_type": "forex",
  "contract_size": "100000",
  "description": "Euro vs US Dollar",
  "digits": 5,
  "execution_type": "market",
  "name": "EURUSD",
  "path": "Forex\\Majors\\EURUSD",
  "profit_currency": "USD",
  "swap_long": "-6.5",
  "swap_short": "1.2",
  "trade_access": "full",
  "volume_max": "100",
  "volume_min": "0.01",
  "volume_step": "0.01"
}'
json
{
  "success": true,
  "code": "ok",
  "message": "done",
  "data": {
    "allow_negative_prices": true,
    "allowed_expirations": [
      "string"
    ],
    "allowed_fill_policies": [
      "string"
    ],
    "allowed_order_types": [
      "string"
    ],
    "background_color": "string",
    "base_currency": "string",
    "base_currency_digits": 1,
    "basis_symbol": "string",
    "book_depth": 1,
    "calc_type": "forex",
    "category": "string",
    "cfi_code": "string"
  },
  "request_id": "5b7f2c1e"
}
ts
staff.symbols.create(body: models.Symbol, options?: RequestOptions): Promise<models.Symbol>

listFolders ​

GET/admin/v1/symbols/folders

List symbol folders

Every folder of the symbol tree: the folders the symbols' paths make and the empty ones staff created, each once (case-insensitive), sorted by path, with how many symbols sit anywhere inside it.

More details

Rights: the staff member needs at least one of: config.symbols, symbols.quick_edit.

Returns
Promise<Folder[]>
The answer's data.
Errors
401auth.session_expired: session expired, sign in again
403auth.invalid_terminal: this terminal cannot be used here
403auth.otp_enrol_required: your group requires one-time codes: set them up to continue
403auth.password_change_required: you must change your password first
403forbidden: you do not have access to this action
500internal: something went wrong
ts
import { staff } from "@/lib/noviqa"

const data = await staff.symbols.listFolders()
bash
curl -X GET "$NOVIQA_API_URL/admin/v1/symbols/folders" \
  -H "Authorization: Bearer $NOVIQA_TOKEN"
json
{
  "success": true,
  "code": "ok",
  "message": "done",
  "data": [
    {
      "path": "real\\standard",
      "symbols": 1
    }
  ],
  "request_id": "5b7f2c1e"
}
ts
staff.symbols.listFolders(options?: RequestOptions): Promise<symbol.Folder[]>

createFolders ​

POST/admin/v1/symbols/folders

Create a symbol folder

Adds an empty folder so symbols can be created in it. Send path only: 1-7 sections joined by , each 1-64 letters, digits, spaces or . _ & # - without leading or trailing spaces, at most 200 characters. An existing folder answers conflict. Writes a config line to the journal. Answers the folder (symbols 0).

More details

Rights: the staff member needs every one of: config.symbols.

Request body
fromstring
pathstring
tostring
Returns
Promise<Folder>
The answer's data.
Errors
400invalid_input: invalid input
401auth.session_expired: session expired, sign in again
403auth.csrf_invalid: request refused: reload the page and try again
403auth.invalid_terminal: this terminal cannot be used here
403auth.otp_enrol_required: your group requires one-time codes: set them up to continue
403auth.password_change_required: you must change your password first
403forbidden: you do not have access to this action
409conflict: already exists
500internal: something went wrong
ts
import { staff } from "@/lib/noviqa"

const data = await staff.symbols.createFolders({
  path: "Forex\\Exotics"
})
bash
curl -X POST "$NOVIQA_API_URL/admin/v1/symbols/folders" \
  -H "Authorization: Bearer $NOVIQA_TOKEN" \
  -H "Content-Type: application/json" \
  --data-raw '{
  "path": "Forex\\Exotics"
}'
json
{
  "success": true,
  "code": "ok",
  "message": "done",
  "data": {
    "path": "real\\standard",
    "symbols": 1
  },
  "request_id": "5b7f2c1e"
}
ts
staff.symbols.createFolders(body: http.folderBody, options?: RequestOptions): Promise<symbol.Folder>

updateFolders ​

PATCH/admin/v1/symbols/folders

Rename or move a symbol folder

Moves the folder from to to (both required, same rules as create) with every symbol and folder inside it; each moved symbol's version goes up. The same path in another case changes nothing. A folder cannot move into itself, and a moved symbol path may not exceed 255 characters or 8 sections (invalid_input). A symbol or folder already at the target path answers conflict. Writes a config line to the journal and bumps the configuration version when symbols moved. Answers the new folder with the number of symbols moved.

More details

Rights: the staff member needs every one of: config.symbols.

Request body
fromstring
pathstring
tostring
Returns
Promise<Folder>
The answer's data.
Errors
400invalid_input: invalid input
401auth.session_expired: session expired, sign in again
403auth.csrf_invalid: request refused: reload the page and try again
403auth.invalid_terminal: this terminal cannot be used here
403auth.otp_enrol_required: your group requires one-time codes: set them up to continue
403auth.password_change_required: you must change your password first
403forbidden: you do not have access to this action
409conflict: already exists
500internal: something went wrong
ts
import { staff } from "@/lib/noviqa"

const data = await staff.symbols.updateFolders({
  from: "Forex\\Exotics",
  to: "Forex\\Minors"
})
bash
curl -X PATCH "$NOVIQA_API_URL/admin/v1/symbols/folders" \
  -H "Authorization: Bearer $NOVIQA_TOKEN" \
  -H "Content-Type: application/json" \
  --data-raw '{
  "from": "Forex\\Exotics",
  "to": "Forex\\Minors"
}'
json
{
  "success": true,
  "code": "ok",
  "message": "done",
  "data": {
    "path": "real\\standard",
    "symbols": 1
  },
  "request_id": "5b7f2c1e"
}
ts
staff.symbols.updateFolders(body: http.folderBody, options?: RequestOptions): Promise<symbol.Folder>

deleteFolders ​

DELETE/admin/v1/symbols/folders

Delete an empty symbol folder

Removes the folder path and the empty folders inside it. A folder holding any symbol (at any depth) answers conflict: move or delete its symbols first. A folder that was never created (one only the symbols' paths make) answers not_found. Writes a config line to the journal.

More details

Rights: the staff member needs every one of: config.symbols.

Parameters
pathstring · queryrequired
Folder path, e.g. Forex\Exotics (URL-encode the backslash as %5C).
Returns
Promise<null>
The answer's data.
Errors
400invalid_input: invalid input
401auth.session_expired: session expired, sign in again
403auth.csrf_invalid: request refused: reload the page and try again
403auth.invalid_terminal: this terminal cannot be used here
403auth.otp_enrol_required: your group requires one-time codes: set them up to continue
403auth.password_change_required: you must change your password first
403forbidden: you do not have access to this action
404not_found: not found
409conflict: already exists
500internal: something went wrong
ts
import { staff } from "@/lib/noviqa"

const data = await staff.symbols.deleteFolders({
  path: "string"
})
bash
curl -X DELETE "$NOVIQA_API_URL/admin/v1/symbols/folders?path=string" \
  -H "Authorization: Bearer $NOVIQA_TOKEN"
json
{
  "success": true,
  "code": "ok",
  "message": "done",
  "data": null,
  "request_id": "5b7f2c1e"
}
ts
staff.symbols.deleteFolders(query: { path }, options?: RequestOptions): Promise<null>

lookups ​

GET/admin/v1/symbols/lookups

Symbol editor choices

The option sets of the symbol editor's drop-downs (calc types, trade access, execution types, order types and so on) plus the values already used by some symbol (currencies, exchanges, countries, sectors, industries, categories, sorted, once each) and the symbols that may serve as a quote source (those that do not take quotes from another symbol themselves).

More details

Rights: the staff member needs at least one of: config.symbols, symbols.quick_edit.

Returns
Promise<Lookups>
The answer's data.
Errors
401auth.session_expired: session expired, sign in again
403auth.invalid_terminal: this terminal cannot be used here
403auth.otp_enrol_required: your group requires one-time codes: set them up to continue
403auth.password_change_required: you must change your password first
403forbidden: you do not have access to this action
500internal: something went wrong
ts
import { staff } from "@/lib/noviqa"

const data = await staff.symbols.lookups()
bash
curl -X GET "$NOVIQA_API_URL/admin/v1/symbols/lookups" \
  -H "Authorization: Bearer $NOVIQA_TOKEN"
json
{
  "success": true,
  "code": "ok",
  "message": "done",
  "data": {
    "calc_types": [
      "forex"
    ],
    "categories": [
      "string"
    ],
    "chart_prices": [
      "bid"
    ],
    "countries": [
      "string"
    ],
    "currencies": [
      "string"
    ],
    "exchanges": [
      "string"
    ],
    "execution_types": [
      "instant"
    ],
    "expirations": [
      "string"
    ],
    "fill_policies": [
      "string"
    ],
    "industries": [
      "string"
    ],
    "margin_kinds": [
      "string"
    ],
    "order_lifetimes": [
      "until_cancelled"
    ]
  },
  "request_id": "5b7f2c1e"
}
ts
staff.symbols.lookups(options?: RequestOptions): Promise<symbol.Lookups>

retrieve ​

GET/admin/v1/symbols/{id}

Get a symbol

One symbol with its sessions and margin rates. Keep version: every change must send it back.

More details

Rights: the staff member needs at least one of: config.symbols, symbols.quick_edit.

Parameters
idinteger · pathrequired
Symbol id.
Returns
Promise<Symbol>
The answer's data.
Errors
400invalid_input: invalid input
401auth.session_expired: session expired, sign in again
403auth.invalid_terminal: this terminal cannot be used here
403auth.otp_enrol_required: your group requires one-time codes: set them up to continue
403auth.password_change_required: you must change your password first
403forbidden: you do not have access to this action
404not_found: not found
500internal: something went wrong
ts
import { staff } from "@/lib/noviqa"

const data = await staff.symbols.retrieve(1)
bash
curl -X GET "$NOVIQA_API_URL/admin/v1/symbols/1" \
  -H "Authorization: Bearer $NOVIQA_TOKEN"
json
{
  "success": true,
  "code": "ok",
  "message": "done",
  "data": {
    "allow_negative_prices": true,
    "allowed_expirations": [
      "string"
    ],
    "allowed_fill_policies": [
      "string"
    ],
    "allowed_order_types": [
      "string"
    ],
    "background_color": "string",
    "base_currency": "string",
    "base_currency_digits": 1,
    "basis_symbol": "string",
    "book_depth": 1,
    "calc_type": "forex",
    "category": "string",
    "cfi_code": "string"
  },
  "request_id": "5b7f2c1e"
}
ts
staff.symbols.retrieve(id: number, options?: RequestOptions): Promise<models.Symbol>

update ​

PATCH/admin/v1/symbols/{id}

Change a symbol

Changes the fields sent. version is required and must equal the stored version, else conflict (reload and retry). id, path, status, created_at and updated_at cannot be changed here (move a symbol with PATCH /admin/v1/symbols/folders, archive or restore it with its own calls). sessions and margin_rates, when sent, replace the whole list. The result must pass every symbol rule (see create). A change that alters nothing answers the symbol as it is, without a new version or journal line. Answers the saved symbol with its new version. Writes a config line to the journal and bumps the configuration version, so the trading services reload the symbol within moments.

More details

Rights: the staff member needs every one of: config.symbols.

Parameters
idinteger · pathrequired
Symbol id.
Request body
allow_negative_pricesboolean
e.g. some futures and spreads
allowed_expirationsstring[]
allowed_fill_policiesstring[]
allowed_order_typesstring[]
background_colorstring
#RRGGBB shown behind the symbol in lists; empty = none
base_currencystring
base_currency_digitsinteger
Rounding used when converting into each currency.
basis_symbolstring
the underlying instrument, for a derivative
book_depthinteger
market depth levels, 0 = off
calc_typeCalcType
CalcType is the formula family for margin, profit and swaps.
forex forex_no_leverage cfd cfd_leverage cfd_index futures
categorystring
cfi_codestring
ISO 10962 classification of financial instruments
chart_priceChartPrice
ChartPrice is the price that draws charts and history.
bid last
contract_sizestring
Exact decimal as a string. Never parse it into a binary float for money or prices.
countrystring
created_atstring
UTC time, RFC 3339.
currency_margin_ratestring
MOEX FORTS currency risk percentage; stored, FORTS calculation is not implemented Exact decimal as a string. Never parse it into a binary float for money or prices.
day_stats_from_feedboolean
take open/high/low from the feed
depth_of_market_queue_volumeinteger
volume shown per book level, 0 = off
descriptionstring
digitsinteger
exchangestring
execution_typeExecutionType
ExecutionType says how orders on a symbol are filled.
instant request market exchange
fast_confirmation_of_requotesboolean
request execution: skip the dealer round-trip on a fast requote
filter_discard_ptsinteger
filter_gap_ptsinteger
filter_gap_ticksinteger
filter_hard_ptsinteger
filter_hard_ticksinteger
filter_soft_ptsinteger
Price filters in points (ticks = how many in a row confirm a move); 0 = off.
filter_soft_ticksinteger
filter_spread_max_ptsinteger
filter_spread_min_ptsinteger
fixed_spreadinteger
points, 0 = floating
freeze_level_ptsinteger
gap_modeGapMode
GapMode says how a chart shows the price jump when trading resumes after a break. - show: the gap is drawn as-is - fill_previous_close: the chart is stitched to the previous close
show fill_previous_close
hedged_margin_larger_legboolean
idinteger
industrystring
instant_max_age_secinteger
instant_max_loss_dev_ptsinteger
instant_max_profit_dev_ptsinteger
instant_max_volumestring
bigger orders go to a dealer, 0 = no limit Exact decimal as a string. Never parse it into a binary float for money or prices.
international_namestring
isinstring
Descriptive only; shown to traders, never used in calculations.
keep_rejected_ticksboolean
store ticks the filters refused
liquidity_margin_ratestring
exchange collateral share; stored, exchange valuation is not implemented Exact decimal as a string. Never parse it into a binary float for money or prices.
margin_check_on_executionboolean
additional check after dealer/provider confirmation; activation is always checked
margin_check_on_stopsboolean
check when stop loss / take profit fills
margin_currencystring
margin_currency_digitsinteger
margin_exclude_open_profitboolean
ignore floating profit in free margin
margin_hedgedstring
Exact decimal as a string. Never parse it into a binary float for money or prices.
margin_initialstring
Exact decimal as a string. Never parse it into a binary float for money or prices.
margin_maintenancestring
Exact decimal as a string. Never parse it into a binary float for money or prices.
margin_ratesMarginRate_input[]
margin_recalc_dailyboolean
recalculate at the day change
maximum_pricestring
the day's upper price limit Exact decimal as a string. Never parse it into a binary float for money or prices.
minimum_pricestring
the day's lower price limit Exact decimal as a string. Never parse it into a binary float for money or prices.
namestring
order_lifetimeOrderLifetime
OrderLifetime says what happens to pending orders and stops at the day change.
until_cancelled today_with_stops today_without_stops
page_urlstring
pathstring
where it sits in the tree and ends with the name, e.g. Forex\Majors\EURUSD
profit_by_market_priceboolean
forex: convert profit at the market bid/ask, not the deal price
profit_currencystring
profit_currency_digitsinteger
quote_source_idinteger
explicit source symbol; overrides all datafeed translations and symbol masks; nil restores feed mapping
quote_subscription_delay_secinteger
delay before a terminal's live quotes, 0 = none
quote_timeout_secinteger
request_needs_confirmationboolean
Request execution: the client confirms the dealer's price once more.
request_timeout_secinteger
sectorstring
sessionsSession_input[]
settlement_pricestring
Exchange and futures only; 0 = unset. the exchange's official close, used to value open positions Exact decimal as a string. Never parse it into a binary float for money or prices.
signals_enabledboolean
splice_typeSpliceType
SpliceType says how a futures chart is joined across a contract rollover. - none: each contract's own prices, no adjustment - close_and_reopen: close the old contract and start a fresh chart - price_adjustment: shift older prices so the join has no gap
none close_and_reopen price_adjustment
spread_ask_shiftinteger
spread_bid_shiftinteger
statusSymbolStatus
SymbolStatus is the life-cycle of a symbol.
active archived
stops_level_ptsinteger
stream_quotesboolean
Quote handling in the market data service. false stops publishing prices
swap_days_per_yearinteger
swap_longstring
Exact decimal as a string. Never parse it into a binary float for money or prices.
swap_multipliersstring[]
Sunday..Saturday
swap_shortstring
Exact decimal as a string. Never parse it into a binary float for money or prices.
swap_typeSwapType
SwapType says how the overnight charge is computed. - reopen_close_price: close and reopen the position at the close price - reopen_bid: close and reopen at the current bid
points base_currency margin_currency profit_currency deposit_currency percent_current_price percent_open_price reopen_close_price reopen_bid
swaps_enabledboolean
swaps_on_holidaysboolean
charge holidays on the next trading day
tick_sizestring
Exact decimal as a string. Never parse it into a binary float for money or prices.
tick_valuestring
Exact decimal as a string. Never parse it into a binary float for money or prices.
trade_accessTradeAccess
TradeAccess says what trading a symbol allows.
disabled long_only short_only close_only full
trading_ends_atstring
UTC time, RFC 3339.
trading_starts_atstring
A contract trades only inside its life (futures expire); nil = no limit. UTC time, RFC 3339.
updated_atstring
UTC time, RFC 3339.
versioninteger
volume_limitstring
0 = unlimited Exact decimal as a string. Never parse it into a binary float for money or prices.
volume_maxstring
Exact decimal as a string. Never parse it into a binary float for money or prices.
volume_minstring
Exact decimal as a string. Never parse it into a binary float for money or prices.
volume_stepstring
Exact decimal as a string. Never parse it into a binary float for money or prices.
Returns
Promise<Symbol>
The answer's data.
Errors
400invalid_input: invalid input
401auth.session_expired: session expired, sign in again
403auth.csrf_invalid: request refused: reload the page and try again
403auth.invalid_terminal: this terminal cannot be used here
403auth.otp_enrol_required: your group requires one-time codes: set them up to continue
403auth.password_change_required: you must change your password first
403forbidden: you do not have access to this action
404not_found: not found
409conflict: already exists
500internal: something went wrong
ts
import { staff } from "@/lib/noviqa"

const data = await staff.symbols.update(1, {
  description: "Euro vs US Dollar",
  stops_level_pts: 10,
  swap_long: "-6.8",
  version: 4,
  volume_max: "200"
})
bash
curl -X PATCH "$NOVIQA_API_URL/admin/v1/symbols/1" \
  -H "Authorization: Bearer $NOVIQA_TOKEN" \
  -H "Content-Type: application/json" \
  --data-raw '{
  "description": "Euro vs US Dollar",
  "stops_level_pts": 10,
  "swap_long": "-6.8",
  "version": 4,
  "volume_max": "200"
}'
json
{
  "success": true,
  "code": "ok",
  "message": "done",
  "data": {
    "allow_negative_prices": true,
    "allowed_expirations": [
      "string"
    ],
    "allowed_fill_policies": [
      "string"
    ],
    "allowed_order_types": [
      "string"
    ],
    "background_color": "string",
    "base_currency": "string",
    "base_currency_digits": 1,
    "basis_symbol": "string",
    "book_depth": 1,
    "calc_type": "forex",
    "category": "string",
    "cfi_code": "string"
  },
  "request_id": "5b7f2c1e"
}
ts
staff.symbols.update(id: number, body: models.Symbol, options?: RequestOptions): Promise<models.Symbol>

delete ​

DELETE/admin/v1/symbols/{id}

Delete a symbol

Removes a symbol with its sessions and margin rates. Refused with conflict while other symbols take their quotes from it, and with invalid_input while other records still refer to it: archive it instead. Writes a config line to the journal and bumps the configuration version, so the trading services reload the symbol within moments.

More details

Rights: the staff member needs every one of: config.symbols.

Parameters
idinteger · pathrequired
Symbol id.
Returns
Promise<null>
The answer's data.
Errors
400invalid_input: invalid input
401auth.session_expired: session expired, sign in again
403auth.csrf_invalid: request refused: reload the page and try again
403auth.invalid_terminal: this terminal cannot be used here
403auth.otp_enrol_required: your group requires one-time codes: set them up to continue
403auth.password_change_required: you must change your password first
403forbidden: you do not have access to this action
404not_found: not found
409conflict: already exists
500internal: something went wrong
ts
import { staff } from "@/lib/noviqa"

const data = await staff.symbols.delete(1)
bash
curl -X DELETE "$NOVIQA_API_URL/admin/v1/symbols/1" \
  -H "Authorization: Bearer $NOVIQA_TOKEN"
json
{
  "success": true,
  "code": "ok",
  "message": "done",
  "data": null,
  "request_id": "5b7f2c1e"
}
ts
staff.symbols.delete(id: number, options?: RequestOptions): Promise<null>

archive ​

POST/admin/v1/symbols/{id}/archive

Archive a symbol

Hides the symbol from trading and from terminals; its history stays readable. No body. Archiving an archived symbol changes nothing. Answers the symbol. Writes a config line to the journal and bumps the configuration version, so the trading services reload the symbol within moments.

More details

Rights: the staff member needs every one of: config.symbols.

Parameters
idinteger · pathrequired
Symbol id.
Returns
Promise<Symbol>
The answer's data.
Errors
400invalid_input: invalid input
401auth.session_expired: session expired, sign in again
403auth.csrf_invalid: request refused: reload the page and try again
403auth.invalid_terminal: this terminal cannot be used here
403auth.otp_enrol_required: your group requires one-time codes: set them up to continue
403auth.password_change_required: you must change your password first
403forbidden: you do not have access to this action
404not_found: not found
409conflict: already exists
500internal: something went wrong
ts
import { staff } from "@/lib/noviqa"

const data = await staff.symbols.archive(1)
bash
curl -X POST "$NOVIQA_API_URL/admin/v1/symbols/1/archive" \
  -H "Authorization: Bearer $NOVIQA_TOKEN"
json
{
  "success": true,
  "code": "ok",
  "message": "done",
  "data": {
    "allow_negative_prices": true,
    "allowed_expirations": [
      "string"
    ],
    "allowed_fill_policies": [
      "string"
    ],
    "allowed_order_types": [
      "string"
    ],
    "background_color": "string",
    "base_currency": "string",
    "base_currency_digits": 1,
    "basis_symbol": "string",
    "book_depth": 1,
    "calc_type": "forex",
    "category": "string",
    "cfi_code": "string"
  },
  "request_id": "5b7f2c1e"
}
ts
staff.symbols.archive(id: number, options?: RequestOptions): Promise<models.Symbol>

clone ​

POST/admin/v1/symbols/{id}/clone

Clone a symbol

Copies every setting of the symbol under a new name (required, same rules as create). The copy is active, starts at version 1 and takes its quotes from the original (quote_source_id). path is optional: left out, the copy sits in the original's folder (its path is the original's folder plus the new name). A name or path already used answers conflict. The source minute-bar history is copied by a durable background job; progress and failures appear in the journal. Answers the new symbol. Writes a config line to the journal and bumps the configuration version, so the trading services reload the symbol within moments.

More details

Rights: the staff member needs every one of: config.symbols.

Parameters
idinteger · pathrequired
Id of the symbol to copy.
Request body
namestring
pathstring
optional; default: next to the original
Returns
Promise<Symbol>
The answer's data.
Errors
400invalid_input: invalid input
401auth.session_expired: session expired, sign in again
403auth.csrf_invalid: request refused: reload the page and try again
403auth.invalid_terminal: this terminal cannot be used here
403auth.otp_enrol_required: your group requires one-time codes: set them up to continue
403auth.password_change_required: you must change your password first
403forbidden: you do not have access to this action
404not_found: not found
409conflict: already exists
500internal: something went wrong
ts
import { staff } from "@/lib/noviqa"

const data = await staff.symbols.clone(1, {
  name: "EURUSD.pro",
  path: "Forex\\Pro\\EURUSD.pro"
})
bash
curl -X POST "$NOVIQA_API_URL/admin/v1/symbols/1/clone" \
  -H "Authorization: Bearer $NOVIQA_TOKEN" \
  -H "Content-Type: application/json" \
  --data-raw '{
  "name": "EURUSD.pro",
  "path": "Forex\\Pro\\EURUSD.pro"
}'
json
{
  "success": true,
  "code": "ok",
  "message": "done",
  "data": {
    "allow_negative_prices": true,
    "allowed_expirations": [
      "string"
    ],
    "allowed_fill_policies": [
      "string"
    ],
    "allowed_order_types": [
      "string"
    ],
    "background_color": "string",
    "base_currency": "string",
    "base_currency_digits": 1,
    "basis_symbol": "string",
    "book_depth": 1,
    "calc_type": "forex",
    "category": "string",
    "cfi_code": "string"
  },
  "request_id": "5b7f2c1e"
}
ts
staff.symbols.clone(id: number, body: http.cloneRequest, options?: RequestOptions): Promise<models.Symbol>

move ​

POST/admin/v1/symbols/{id}/move

Move a symbol to another folder

Puts the symbol in path (a folder, same rules as a symbol folder; left out or empty moves it to the root), keeping its name and every other setting; its version goes up. Only this symbol moves — unlike PATCH /admin/v1/symbols/folders, nothing else in the source or destination folder is touched. Already being in path changes nothing. A symbol already at the resulting path answers conflict. Answers the moved symbol. Writes a config line to the journal and bumps the configuration version, so the trading services reload the symbol within moments.

More details

Rights: the staff member needs every one of: config.symbols.

Parameters
idinteger · pathrequired
Symbol id.
Request body
pathstring
Returns
Promise<Symbol>
The answer's data.
Errors
400invalid_input: invalid input
401auth.session_expired: session expired, sign in again
403auth.csrf_invalid: request refused: reload the page and try again
403auth.invalid_terminal: this terminal cannot be used here
403auth.otp_enrol_required: your group requires one-time codes: set them up to continue
403auth.password_change_required: you must change your password first
403forbidden: you do not have access to this action
404not_found: not found
409conflict: already exists
500internal: something went wrong
ts
import { staff } from "@/lib/noviqa"

const data = await staff.symbols.move(1, {
  path: "Forex\\Minors"
})
bash
curl -X POST "$NOVIQA_API_URL/admin/v1/symbols/1/move" \
  -H "Authorization: Bearer $NOVIQA_TOKEN" \
  -H "Content-Type: application/json" \
  --data-raw '{
  "path": "Forex\\Minors"
}'
json
{
  "success": true,
  "code": "ok",
  "message": "done",
  "data": {
    "allow_negative_prices": true,
    "allowed_expirations": [
      "string"
    ],
    "allowed_fill_policies": [
      "string"
    ],
    "allowed_order_types": [
      "string"
    ],
    "background_color": "string",
    "base_currency": "string",
    "base_currency_digits": 1,
    "basis_symbol": "string",
    "book_depth": 1,
    "calc_type": "forex",
    "category": "string",
    "cfi_code": "string"
  },
  "request_id": "5b7f2c1e"
}
ts
staff.symbols.move(id: number, body: http.moveRequest, options?: RequestOptions): Promise<models.Symbol>

updateQuick ​

PATCH/admin/v1/symbols/{id}/quick

Quick-edit a symbol

A small change for staff who may not edit whole symbols: only fixed_spread, spread_bid_shift, spread_ask_shift, and execution_type may be sent, plus the required version; any other field answers invalid_input. Version and validation rules are those of the full change. Writes a config line to the journal and bumps the configuration version, so the trading services reload the symbol within moments.

More details

Rights: the staff member needs every one of: symbols.quick_edit.

Parameters
idinteger · pathrequired
Symbol id.
Request body
allow_negative_pricesboolean
e.g. some futures and spreads
allowed_expirationsstring[]
allowed_fill_policiesstring[]
allowed_order_typesstring[]
background_colorstring
#RRGGBB shown behind the symbol in lists; empty = none
base_currencystring
base_currency_digitsinteger
Rounding used when converting into each currency.
basis_symbolstring
the underlying instrument, for a derivative
book_depthinteger
market depth levels, 0 = off
calc_typeCalcType
CalcType is the formula family for margin, profit and swaps.
forex forex_no_leverage cfd cfd_leverage cfd_index futures
categorystring
cfi_codestring
ISO 10962 classification of financial instruments
chart_priceChartPrice
ChartPrice is the price that draws charts and history.
bid last
contract_sizestring
Exact decimal as a string. Never parse it into a binary float for money or prices.
countrystring
created_atstring
UTC time, RFC 3339.
currency_margin_ratestring
MOEX FORTS currency risk percentage; stored, FORTS calculation is not implemented Exact decimal as a string. Never parse it into a binary float for money or prices.
day_stats_from_feedboolean
take open/high/low from the feed
depth_of_market_queue_volumeinteger
volume shown per book level, 0 = off
descriptionstring
digitsinteger
exchangestring
execution_typeExecutionType
ExecutionType says how orders on a symbol are filled.
instant request market exchange
fast_confirmation_of_requotesboolean
request execution: skip the dealer round-trip on a fast requote
filter_discard_ptsinteger
filter_gap_ptsinteger
filter_gap_ticksinteger
filter_hard_ptsinteger
filter_hard_ticksinteger
filter_soft_ptsinteger
Price filters in points (ticks = how many in a row confirm a move); 0 = off.
filter_soft_ticksinteger
filter_spread_max_ptsinteger
filter_spread_min_ptsinteger
fixed_spreadinteger
points, 0 = floating
freeze_level_ptsinteger
gap_modeGapMode
GapMode says how a chart shows the price jump when trading resumes after a break. - show: the gap is drawn as-is - fill_previous_close: the chart is stitched to the previous close
show fill_previous_close
hedged_margin_larger_legboolean
idinteger
industrystring
instant_max_age_secinteger
instant_max_loss_dev_ptsinteger
instant_max_profit_dev_ptsinteger
instant_max_volumestring
bigger orders go to a dealer, 0 = no limit Exact decimal as a string. Never parse it into a binary float for money or prices.
international_namestring
isinstring
Descriptive only; shown to traders, never used in calculations.
keep_rejected_ticksboolean
store ticks the filters refused
liquidity_margin_ratestring
exchange collateral share; stored, exchange valuation is not implemented Exact decimal as a string. Never parse it into a binary float for money or prices.
margin_check_on_executionboolean
additional check after dealer/provider confirmation; activation is always checked
margin_check_on_stopsboolean
check when stop loss / take profit fills
margin_currencystring
margin_currency_digitsinteger
margin_exclude_open_profitboolean
ignore floating profit in free margin
margin_hedgedstring
Exact decimal as a string. Never parse it into a binary float for money or prices.
margin_initialstring
Exact decimal as a string. Never parse it into a binary float for money or prices.
margin_maintenancestring
Exact decimal as a string. Never parse it into a binary float for money or prices.
margin_ratesMarginRate_input[]
margin_recalc_dailyboolean
recalculate at the day change
maximum_pricestring
the day's upper price limit Exact decimal as a string. Never parse it into a binary float for money or prices.
minimum_pricestring
the day's lower price limit Exact decimal as a string. Never parse it into a binary float for money or prices.
namestring
order_lifetimeOrderLifetime
OrderLifetime says what happens to pending orders and stops at the day change.
until_cancelled today_with_stops today_without_stops
page_urlstring
pathstring
where it sits in the tree and ends with the name, e.g. Forex\Majors\EURUSD
profit_by_market_priceboolean
forex: convert profit at the market bid/ask, not the deal price
profit_currencystring
profit_currency_digitsinteger
quote_source_idinteger
explicit source symbol; overrides all datafeed translations and symbol masks; nil restores feed mapping
quote_subscription_delay_secinteger
delay before a terminal's live quotes, 0 = none
quote_timeout_secinteger
request_needs_confirmationboolean
Request execution: the client confirms the dealer's price once more.
request_timeout_secinteger
sectorstring
sessionsSession_input[]
settlement_pricestring
Exchange and futures only; 0 = unset. the exchange's official close, used to value open positions Exact decimal as a string. Never parse it into a binary float for money or prices.
signals_enabledboolean
splice_typeSpliceType
SpliceType says how a futures chart is joined across a contract rollover. - none: each contract's own prices, no adjustment - close_and_reopen: close the old contract and start a fresh chart - price_adjustment: shift older prices so the join has no gap
none close_and_reopen price_adjustment
spread_ask_shiftinteger
spread_bid_shiftinteger
statusSymbolStatus
SymbolStatus is the life-cycle of a symbol.
active archived
stops_level_ptsinteger
stream_quotesboolean
Quote handling in the market data service. false stops publishing prices
swap_days_per_yearinteger
swap_longstring
Exact decimal as a string. Never parse it into a binary float for money or prices.
swap_multipliersstring[]
Sunday..Saturday
swap_shortstring
Exact decimal as a string. Never parse it into a binary float for money or prices.
swap_typeSwapType
SwapType says how the overnight charge is computed. - reopen_close_price: close and reopen the position at the close price - reopen_bid: close and reopen at the current bid
points base_currency margin_currency profit_currency deposit_currency percent_current_price percent_open_price reopen_close_price reopen_bid
swaps_enabledboolean
swaps_on_holidaysboolean
charge holidays on the next trading day
tick_sizestring
Exact decimal as a string. Never parse it into a binary float for money or prices.
tick_valuestring
Exact decimal as a string. Never parse it into a binary float for money or prices.
trade_accessTradeAccess
TradeAccess says what trading a symbol allows.
disabled long_only short_only close_only full
trading_ends_atstring
UTC time, RFC 3339.
trading_starts_atstring
A contract trades only inside its life (futures expire); nil = no limit. UTC time, RFC 3339.
updated_atstring
UTC time, RFC 3339.
versioninteger
volume_limitstring
0 = unlimited Exact decimal as a string. Never parse it into a binary float for money or prices.
volume_maxstring
Exact decimal as a string. Never parse it into a binary float for money or prices.
volume_minstring
Exact decimal as a string. Never parse it into a binary float for money or prices.
volume_stepstring
Exact decimal as a string. Never parse it into a binary float for money or prices.
Returns
Promise<Symbol>
The answer's data.
Errors
400invalid_input: invalid input
401auth.session_expired: session expired, sign in again
403auth.csrf_invalid: request refused: reload the page and try again
403auth.invalid_terminal: this terminal cannot be used here
403auth.otp_enrol_required: your group requires one-time codes: set them up to continue
403auth.password_change_required: you must change your password first
403forbidden: you do not have access to this action
404not_found: not found
409conflict: already exists
500internal: something went wrong
ts
import { staff } from "@/lib/noviqa"

const data = await staff.symbols.updateQuick(1, {
  execution_type: "market",
  fixed_spread: 12,
  version: 4
})
bash
curl -X PATCH "$NOVIQA_API_URL/admin/v1/symbols/1/quick" \
  -H "Authorization: Bearer $NOVIQA_TOKEN" \
  -H "Content-Type: application/json" \
  --data-raw '{
  "execution_type": "market",
  "fixed_spread": 12,
  "version": 4
}'
json
{
  "success": true,
  "code": "ok",
  "message": "done",
  "data": {
    "allow_negative_prices": true,
    "allowed_expirations": [
      "string"
    ],
    "allowed_fill_policies": [
      "string"
    ],
    "allowed_order_types": [
      "string"
    ],
    "background_color": "string",
    "base_currency": "string",
    "base_currency_digits": 1,
    "basis_symbol": "string",
    "book_depth": 1,
    "calc_type": "forex",
    "category": "string",
    "cfi_code": "string"
  },
  "request_id": "5b7f2c1e"
}
ts
staff.symbols.updateQuick(id: number, body: models.Symbol, options?: RequestOptions): Promise<models.Symbol>

restore ​

POST/admin/v1/symbols/{id}/restore

Restore an archived symbol

Makes an archived symbol active again. No body. Restoring an active symbol changes nothing. Answers the symbol. Writes a config line to the journal and bumps the configuration version, so the trading services reload the symbol within moments.

More details

Rights: the staff member needs every one of: config.symbols.

Parameters
idinteger · pathrequired
Symbol id.
Returns
Promise<Symbol>
The answer's data.
Errors
400invalid_input: invalid input
401auth.session_expired: session expired, sign in again
403auth.csrf_invalid: request refused: reload the page and try again
403auth.invalid_terminal: this terminal cannot be used here
403auth.otp_enrol_required: your group requires one-time codes: set them up to continue
403auth.password_change_required: you must change your password first
403forbidden: you do not have access to this action
404not_found: not found
409conflict: already exists
500internal: something went wrong
ts
import { staff } from "@/lib/noviqa"

const data = await staff.symbols.restore(1)
bash
curl -X POST "$NOVIQA_API_URL/admin/v1/symbols/1/restore" \
  -H "Authorization: Bearer $NOVIQA_TOKEN"
json
{
  "success": true,
  "code": "ok",
  "message": "done",
  "data": {
    "allow_negative_prices": true,
    "allowed_expirations": [
      "string"
    ],
    "allowed_fill_policies": [
      "string"
    ],
    "allowed_order_types": [
      "string"
    ],
    "background_color": "string",
    "base_currency": "string",
    "base_currency_digits": 1,
    "basis_symbol": "string",
    "book_depth": 1,
    "calc_type": "forex",
    "category": "string",
    "cfi_code": "string"
  },
  "request_id": "5b7f2c1e"
}
ts
staff.symbols.restore(id: number, options?: RequestOptions): Promise<models.Symbol>

swaps ​

GET/admin/v1/symbols/{id}/swaps

Get a symbol's swap settings

Only the swap part of a symbol, for copying swaps from one symbol to another in the editor.

More details

Rights: the staff member needs at least one of: config.symbols, symbols.quick_edit.

Parameters
idinteger · pathrequired
Symbol id.
Returns
Promise<Swaps>
The answer's data.
Errors
400invalid_input: invalid input
401auth.session_expired: session expired, sign in again
403auth.invalid_terminal: this terminal cannot be used here
403auth.otp_enrol_required: your group requires one-time codes: set them up to continue
403auth.password_change_required: you must change your password first
403forbidden: you do not have access to this action
404not_found: not found
500internal: something went wrong
ts
import { staff } from "@/lib/noviqa"

const data = await staff.symbols.swaps(1)
bash
curl -X GET "$NOVIQA_API_URL/admin/v1/symbols/1/swaps" \
  -H "Authorization: Bearer $NOVIQA_TOKEN"
json
{
  "success": true,
  "code": "ok",
  "message": "done",
  "data": {
    "id": 1,
    "name": "Ann Smith",
    "swap_days_per_year": 1,
    "swap_long": "1.08452",
    "swap_multipliers": [
      "1.08452"
    ],
    "swap_short": "1.08452",
    "swap_type": "points",
    "swaps_enabled": true,
    "swaps_on_holidays": true
  },
  "request_id": "5b7f2c1e"
}
ts
staff.symbols.swaps(id: number, options?: RequestOptions): Promise<symbol.Swaps>