Appearance
staff.symbols
16 methods on staff.symbols. Each returns the answer's data and throws NoviqaError on a failed answer.
list
GET
/admin/v1/symbolsList 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 · queryPart of the name or description, case-insensitive.
pathstring · queryOnly symbols inside this folder (at any depth), e.g. Forex\Majors; case-insensitive.
statusstring · queryOnly symbols with this status.
active archivedcalc_typestring · queryOnly symbols with this calculation type.
forex forex_no_leverage cfd cfd_leverage cfd_index futurespageinteger · query1-based page number; default 1.
limitinteger · queryRows per page; default 100.
Returns
Promise<symbolPage>The answer's
data.Errors
400
invalid_input: invalid input401
auth.session_expired: session expired, sign in again403
auth.invalid_terminal: this terminal cannot be used here403
auth.otp_enrol_required: your group requires one-time codes: set them up to continue403
auth.password_change_required: you must change your password first403
forbidden: you do not have access to this action500
internal: something went wrongts
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/symbolsCreate 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_pricesbooleane.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_currencystringbase_currency_digitsintegerRounding used when converting into each currency.
basis_symbolstringthe underlying instrument, for a derivative
book_depthintegermarket depth levels, 0 = off
calc_typeCalcTypeCalcType is the formula family for margin, profit and swaps.
forex forex_no_leverage cfd cfd_leverage cfd_index futurescategorystringcfi_codestringISO 10962 classification of financial instruments
chart_priceChartPriceChartPrice is the price that draws charts and history.
bid lastcontract_sizestringExact decimal as a string. Never parse it into a binary float for money or prices.
countrystringcreated_atstringUTC time, RFC 3339.
currency_margin_ratestringMOEX 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_feedbooleantake open/high/low from the feed
depth_of_market_queue_volumeintegervolume shown per book level, 0 = off
descriptionstringdigitsintegerexchangestringexecution_typeExecutionTypeExecutionType says how orders on a symbol are filled.
instant request market exchangefast_confirmation_of_requotesbooleanrequest execution: skip the dealer round-trip on a fast requote
filter_discard_ptsintegerfilter_gap_ptsintegerfilter_gap_ticksintegerfilter_hard_ptsintegerfilter_hard_ticksintegerfilter_soft_ptsintegerPrice filters in points (ticks = how many in a row confirm a move); 0 = off.
filter_soft_ticksintegerfilter_spread_max_ptsintegerfilter_spread_min_ptsintegerfixed_spreadintegerpoints, 0 = floating
freeze_level_ptsintegergap_modeGapModeGapMode 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 closeshow fill_previous_closehedged_margin_larger_legbooleanidintegerindustrystringinstant_max_age_secintegerinstant_max_loss_dev_ptsintegerinstant_max_profit_dev_ptsintegerinstant_max_volumestringbigger 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_namestringisinstringDescriptive only; shown to traders, never used in calculations.
keep_rejected_ticksbooleanstore ticks the filters refused
liquidity_margin_ratestringexchange 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_executionbooleanadditional check after dealer/provider confirmation; activation is always checked
margin_check_on_stopsbooleancheck when stop loss / take profit fills
margin_currencystringmargin_currency_digitsintegermargin_exclude_open_profitbooleanignore floating profit in free margin
margin_hedgedstringExact decimal as a string. Never parse it into a binary float for money or prices.
margin_initialstringExact decimal as a string. Never parse it into a binary float for money or prices.
margin_maintenancestringExact decimal as a string. Never parse it into a binary float for money or prices.
margin_ratesMarginRate_input[]margin_recalc_dailybooleanrecalculate at the day change
maximum_pricestringthe day's upper price limit Exact decimal as a string. Never parse it into a binary float for money or prices.
minimum_pricestringthe day's lower price limit Exact decimal as a string. Never parse it into a binary float for money or prices.
namestringorder_lifetimeOrderLifetimeOrderLifetime says what happens to pending orders and stops at the day change.
until_cancelled today_with_stops today_without_stopspage_urlstringpathstringwhere it sits in the tree and ends with the name, e.g. Forex\Majors\EURUSD
profit_by_market_pricebooleanforex: convert profit at the market bid/ask, not the deal price
profit_currencystringprofit_currency_digitsintegerquote_source_idintegerexplicit source symbol; overrides all datafeed translations and symbol masks; nil restores feed mapping
quote_subscription_delay_secintegerdelay before a terminal's live quotes, 0 = none
quote_timeout_secintegerrequest_needs_confirmationbooleanRequest execution: the client confirms the dealer's price once more.
request_timeout_secintegersectorstringsessionsSession_input[]settlement_pricestringExchange 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_enabledbooleansplice_typeSpliceTypeSpliceType 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 gapnone close_and_reopen price_adjustmentspread_ask_shiftintegerspread_bid_shiftintegerstatusSymbolStatusSymbolStatus is the life-cycle of a symbol.
active archivedstops_level_ptsintegerstream_quotesbooleanQuote handling in the market data service. false stops publishing prices
swap_days_per_yearintegerswap_longstringExact decimal as a string. Never parse it into a binary float for money or prices.
swap_multipliersstring[]Sunday..Saturday
swap_shortstringExact decimal as a string. Never parse it into a binary float for money or prices.
swap_typeSwapTypeSwapType 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 bidpoints base_currency margin_currency profit_currency deposit_currency percent_current_price percent_open_price reopen_close_price reopen_bidswaps_enabledbooleanswaps_on_holidaysbooleancharge holidays on the next trading day
tick_sizestringExact decimal as a string. Never parse it into a binary float for money or prices.
tick_valuestringExact decimal as a string. Never parse it into a binary float for money or prices.
trade_accessTradeAccessTradeAccess says what trading a symbol allows.
disabled long_only short_only close_only fulltrading_ends_atstringUTC time, RFC 3339.
trading_starts_atstringA contract trades only inside its life (futures expire); nil = no limit. UTC time, RFC 3339.
updated_atstringUTC time, RFC 3339.
versionintegervolume_limitstring0 = unlimited Exact decimal as a string. Never parse it into a binary float for money or prices.
volume_maxstringExact decimal as a string. Never parse it into a binary float for money or prices.
volume_minstringExact decimal as a string. Never parse it into a binary float for money or prices.
volume_stepstringExact decimal as a string. Never parse it into a binary float for money or prices.
Returns
Promise<Symbol>The answer's
data.Errors
400
invalid_input: invalid input401
auth.session_expired: session expired, sign in again403
auth.csrf_invalid: request refused: reload the page and try again403
auth.invalid_terminal: this terminal cannot be used here403
auth.otp_enrol_required: your group requires one-time codes: set them up to continue403
auth.password_change_required: you must change your password first403
forbidden: you do not have access to this action409
conflict: already exists500
internal: something went wrongts
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/foldersList 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
401
auth.session_expired: session expired, sign in again403
auth.invalid_terminal: this terminal cannot be used here403
auth.otp_enrol_required: your group requires one-time codes: set them up to continue403
auth.password_change_required: you must change your password first403
forbidden: you do not have access to this action500
internal: something went wrongts
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/foldersCreate 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
fromstringpathstringtostringReturns
Promise<Folder>The answer's
data.Errors
400
invalid_input: invalid input401
auth.session_expired: session expired, sign in again403
auth.csrf_invalid: request refused: reload the page and try again403
auth.invalid_terminal: this terminal cannot be used here403
auth.otp_enrol_required: your group requires one-time codes: set them up to continue403
auth.password_change_required: you must change your password first403
forbidden: you do not have access to this action409
conflict: already exists500
internal: something went wrongts
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/foldersRename 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
fromstringpathstringtostringReturns
Promise<Folder>The answer's
data.Errors
400
invalid_input: invalid input401
auth.session_expired: session expired, sign in again403
auth.csrf_invalid: request refused: reload the page and try again403
auth.invalid_terminal: this terminal cannot be used here403
auth.otp_enrol_required: your group requires one-time codes: set them up to continue403
auth.password_change_required: you must change your password first403
forbidden: you do not have access to this action409
conflict: already exists500
internal: something went wrongts
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/foldersDelete 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 · queryrequiredFolder path, e.g. Forex\Exotics (URL-encode the backslash as %5C).
Returns
Promise<null>The answer's
data.Errors
400
invalid_input: invalid input401
auth.session_expired: session expired, sign in again403
auth.csrf_invalid: request refused: reload the page and try again403
auth.invalid_terminal: this terminal cannot be used here403
auth.otp_enrol_required: your group requires one-time codes: set them up to continue403
auth.password_change_required: you must change your password first403
forbidden: you do not have access to this action404
not_found: not found409
conflict: already exists500
internal: something went wrongts
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/lookupsSymbol 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
401
auth.session_expired: session expired, sign in again403
auth.invalid_terminal: this terminal cannot be used here403
auth.otp_enrol_required: your group requires one-time codes: set them up to continue403
auth.password_change_required: you must change your password first403
forbidden: you do not have access to this action500
internal: something went wrongts
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 · pathrequiredSymbol id.
Returns
Promise<Symbol>The answer's
data.Errors
400
invalid_input: invalid input401
auth.session_expired: session expired, sign in again403
auth.invalid_terminal: this terminal cannot be used here403
auth.otp_enrol_required: your group requires one-time codes: set them up to continue403
auth.password_change_required: you must change your password first403
forbidden: you do not have access to this action404
not_found: not found500
internal: something went wrongts
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 · pathrequiredSymbol id.
Request body
allow_negative_pricesbooleane.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_currencystringbase_currency_digitsintegerRounding used when converting into each currency.
basis_symbolstringthe underlying instrument, for a derivative
book_depthintegermarket depth levels, 0 = off
calc_typeCalcTypeCalcType is the formula family for margin, profit and swaps.
forex forex_no_leverage cfd cfd_leverage cfd_index futurescategorystringcfi_codestringISO 10962 classification of financial instruments
chart_priceChartPriceChartPrice is the price that draws charts and history.
bid lastcontract_sizestringExact decimal as a string. Never parse it into a binary float for money or prices.
countrystringcreated_atstringUTC time, RFC 3339.
currency_margin_ratestringMOEX 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_feedbooleantake open/high/low from the feed
depth_of_market_queue_volumeintegervolume shown per book level, 0 = off
descriptionstringdigitsintegerexchangestringexecution_typeExecutionTypeExecutionType says how orders on a symbol are filled.
instant request market exchangefast_confirmation_of_requotesbooleanrequest execution: skip the dealer round-trip on a fast requote
filter_discard_ptsintegerfilter_gap_ptsintegerfilter_gap_ticksintegerfilter_hard_ptsintegerfilter_hard_ticksintegerfilter_soft_ptsintegerPrice filters in points (ticks = how many in a row confirm a move); 0 = off.
filter_soft_ticksintegerfilter_spread_max_ptsintegerfilter_spread_min_ptsintegerfixed_spreadintegerpoints, 0 = floating
freeze_level_ptsintegergap_modeGapModeGapMode 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 closeshow fill_previous_closehedged_margin_larger_legbooleanidintegerindustrystringinstant_max_age_secintegerinstant_max_loss_dev_ptsintegerinstant_max_profit_dev_ptsintegerinstant_max_volumestringbigger 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_namestringisinstringDescriptive only; shown to traders, never used in calculations.
keep_rejected_ticksbooleanstore ticks the filters refused
liquidity_margin_ratestringexchange 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_executionbooleanadditional check after dealer/provider confirmation; activation is always checked
margin_check_on_stopsbooleancheck when stop loss / take profit fills
margin_currencystringmargin_currency_digitsintegermargin_exclude_open_profitbooleanignore floating profit in free margin
margin_hedgedstringExact decimal as a string. Never parse it into a binary float for money or prices.
margin_initialstringExact decimal as a string. Never parse it into a binary float for money or prices.
margin_maintenancestringExact decimal as a string. Never parse it into a binary float for money or prices.
margin_ratesMarginRate_input[]margin_recalc_dailybooleanrecalculate at the day change
maximum_pricestringthe day's upper price limit Exact decimal as a string. Never parse it into a binary float for money or prices.
minimum_pricestringthe day's lower price limit Exact decimal as a string. Never parse it into a binary float for money or prices.
namestringorder_lifetimeOrderLifetimeOrderLifetime says what happens to pending orders and stops at the day change.
until_cancelled today_with_stops today_without_stopspage_urlstringpathstringwhere it sits in the tree and ends with the name, e.g. Forex\Majors\EURUSD
profit_by_market_pricebooleanforex: convert profit at the market bid/ask, not the deal price
profit_currencystringprofit_currency_digitsintegerquote_source_idintegerexplicit source symbol; overrides all datafeed translations and symbol masks; nil restores feed mapping
quote_subscription_delay_secintegerdelay before a terminal's live quotes, 0 = none
quote_timeout_secintegerrequest_needs_confirmationbooleanRequest execution: the client confirms the dealer's price once more.
request_timeout_secintegersectorstringsessionsSession_input[]settlement_pricestringExchange 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_enabledbooleansplice_typeSpliceTypeSpliceType 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 gapnone close_and_reopen price_adjustmentspread_ask_shiftintegerspread_bid_shiftintegerstatusSymbolStatusSymbolStatus is the life-cycle of a symbol.
active archivedstops_level_ptsintegerstream_quotesbooleanQuote handling in the market data service. false stops publishing prices
swap_days_per_yearintegerswap_longstringExact decimal as a string. Never parse it into a binary float for money or prices.
swap_multipliersstring[]Sunday..Saturday
swap_shortstringExact decimal as a string. Never parse it into a binary float for money or prices.
swap_typeSwapTypeSwapType 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 bidpoints base_currency margin_currency profit_currency deposit_currency percent_current_price percent_open_price reopen_close_price reopen_bidswaps_enabledbooleanswaps_on_holidaysbooleancharge holidays on the next trading day
tick_sizestringExact decimal as a string. Never parse it into a binary float for money or prices.
tick_valuestringExact decimal as a string. Never parse it into a binary float for money or prices.
trade_accessTradeAccessTradeAccess says what trading a symbol allows.
disabled long_only short_only close_only fulltrading_ends_atstringUTC time, RFC 3339.
trading_starts_atstringA contract trades only inside its life (futures expire); nil = no limit. UTC time, RFC 3339.
updated_atstringUTC time, RFC 3339.
versionintegervolume_limitstring0 = unlimited Exact decimal as a string. Never parse it into a binary float for money or prices.
volume_maxstringExact decimal as a string. Never parse it into a binary float for money or prices.
volume_minstringExact decimal as a string. Never parse it into a binary float for money or prices.
volume_stepstringExact decimal as a string. Never parse it into a binary float for money or prices.
Returns
Promise<Symbol>The answer's
data.Errors
400
invalid_input: invalid input401
auth.session_expired: session expired, sign in again403
auth.csrf_invalid: request refused: reload the page and try again403
auth.invalid_terminal: this terminal cannot be used here403
auth.otp_enrol_required: your group requires one-time codes: set them up to continue403
auth.password_change_required: you must change your password first403
forbidden: you do not have access to this action404
not_found: not found409
conflict: already exists500
internal: something went wrongts
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 · pathrequiredSymbol id.
Returns
Promise<null>The answer's
data.Errors
400
invalid_input: invalid input401
auth.session_expired: session expired, sign in again403
auth.csrf_invalid: request refused: reload the page and try again403
auth.invalid_terminal: this terminal cannot be used here403
auth.otp_enrol_required: your group requires one-time codes: set them up to continue403
auth.password_change_required: you must change your password first403
forbidden: you do not have access to this action404
not_found: not found409
conflict: already exists500
internal: something went wrongts
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}/archiveArchive 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 · pathrequiredSymbol id.
Returns
Promise<Symbol>The answer's
data.Errors
400
invalid_input: invalid input401
auth.session_expired: session expired, sign in again403
auth.csrf_invalid: request refused: reload the page and try again403
auth.invalid_terminal: this terminal cannot be used here403
auth.otp_enrol_required: your group requires one-time codes: set them up to continue403
auth.password_change_required: you must change your password first403
forbidden: you do not have access to this action404
not_found: not found409
conflict: already exists500
internal: something went wrongts
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}/cloneClone 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 · pathrequiredId of the symbol to copy.
Request body
namestringpathstringoptional; default: next to the original
Returns
Promise<Symbol>The answer's
data.Errors
400
invalid_input: invalid input401
auth.session_expired: session expired, sign in again403
auth.csrf_invalid: request refused: reload the page and try again403
auth.invalid_terminal: this terminal cannot be used here403
auth.otp_enrol_required: your group requires one-time codes: set them up to continue403
auth.password_change_required: you must change your password first403
forbidden: you do not have access to this action404
not_found: not found409
conflict: already exists500
internal: something went wrongts
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}/moveMove 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 · pathrequiredSymbol id.
Request body
pathstringReturns
Promise<Symbol>The answer's
data.Errors
400
invalid_input: invalid input401
auth.session_expired: session expired, sign in again403
auth.csrf_invalid: request refused: reload the page and try again403
auth.invalid_terminal: this terminal cannot be used here403
auth.otp_enrol_required: your group requires one-time codes: set them up to continue403
auth.password_change_required: you must change your password first403
forbidden: you do not have access to this action404
not_found: not found409
conflict: already exists500
internal: something went wrongts
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}/quickQuick-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 · pathrequiredSymbol id.
Request body
allow_negative_pricesbooleane.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_currencystringbase_currency_digitsintegerRounding used when converting into each currency.
basis_symbolstringthe underlying instrument, for a derivative
book_depthintegermarket depth levels, 0 = off
calc_typeCalcTypeCalcType is the formula family for margin, profit and swaps.
forex forex_no_leverage cfd cfd_leverage cfd_index futurescategorystringcfi_codestringISO 10962 classification of financial instruments
chart_priceChartPriceChartPrice is the price that draws charts and history.
bid lastcontract_sizestringExact decimal as a string. Never parse it into a binary float for money or prices.
countrystringcreated_atstringUTC time, RFC 3339.
currency_margin_ratestringMOEX 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_feedbooleantake open/high/low from the feed
depth_of_market_queue_volumeintegervolume shown per book level, 0 = off
descriptionstringdigitsintegerexchangestringexecution_typeExecutionTypeExecutionType says how orders on a symbol are filled.
instant request market exchangefast_confirmation_of_requotesbooleanrequest execution: skip the dealer round-trip on a fast requote
filter_discard_ptsintegerfilter_gap_ptsintegerfilter_gap_ticksintegerfilter_hard_ptsintegerfilter_hard_ticksintegerfilter_soft_ptsintegerPrice filters in points (ticks = how many in a row confirm a move); 0 = off.
filter_soft_ticksintegerfilter_spread_max_ptsintegerfilter_spread_min_ptsintegerfixed_spreadintegerpoints, 0 = floating
freeze_level_ptsintegergap_modeGapModeGapMode 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 closeshow fill_previous_closehedged_margin_larger_legbooleanidintegerindustrystringinstant_max_age_secintegerinstant_max_loss_dev_ptsintegerinstant_max_profit_dev_ptsintegerinstant_max_volumestringbigger 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_namestringisinstringDescriptive only; shown to traders, never used in calculations.
keep_rejected_ticksbooleanstore ticks the filters refused
liquidity_margin_ratestringexchange 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_executionbooleanadditional check after dealer/provider confirmation; activation is always checked
margin_check_on_stopsbooleancheck when stop loss / take profit fills
margin_currencystringmargin_currency_digitsintegermargin_exclude_open_profitbooleanignore floating profit in free margin
margin_hedgedstringExact decimal as a string. Never parse it into a binary float for money or prices.
margin_initialstringExact decimal as a string. Never parse it into a binary float for money or prices.
margin_maintenancestringExact decimal as a string. Never parse it into a binary float for money or prices.
margin_ratesMarginRate_input[]margin_recalc_dailybooleanrecalculate at the day change
maximum_pricestringthe day's upper price limit Exact decimal as a string. Never parse it into a binary float for money or prices.
minimum_pricestringthe day's lower price limit Exact decimal as a string. Never parse it into a binary float for money or prices.
namestringorder_lifetimeOrderLifetimeOrderLifetime says what happens to pending orders and stops at the day change.
until_cancelled today_with_stops today_without_stopspage_urlstringpathstringwhere it sits in the tree and ends with the name, e.g. Forex\Majors\EURUSD
profit_by_market_pricebooleanforex: convert profit at the market bid/ask, not the deal price
profit_currencystringprofit_currency_digitsintegerquote_source_idintegerexplicit source symbol; overrides all datafeed translations and symbol masks; nil restores feed mapping
quote_subscription_delay_secintegerdelay before a terminal's live quotes, 0 = none
quote_timeout_secintegerrequest_needs_confirmationbooleanRequest execution: the client confirms the dealer's price once more.
request_timeout_secintegersectorstringsessionsSession_input[]settlement_pricestringExchange 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_enabledbooleansplice_typeSpliceTypeSpliceType 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 gapnone close_and_reopen price_adjustmentspread_ask_shiftintegerspread_bid_shiftintegerstatusSymbolStatusSymbolStatus is the life-cycle of a symbol.
active archivedstops_level_ptsintegerstream_quotesbooleanQuote handling in the market data service. false stops publishing prices
swap_days_per_yearintegerswap_longstringExact decimal as a string. Never parse it into a binary float for money or prices.
swap_multipliersstring[]Sunday..Saturday
swap_shortstringExact decimal as a string. Never parse it into a binary float for money or prices.
swap_typeSwapTypeSwapType 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 bidpoints base_currency margin_currency profit_currency deposit_currency percent_current_price percent_open_price reopen_close_price reopen_bidswaps_enabledbooleanswaps_on_holidaysbooleancharge holidays on the next trading day
tick_sizestringExact decimal as a string. Never parse it into a binary float for money or prices.
tick_valuestringExact decimal as a string. Never parse it into a binary float for money or prices.
trade_accessTradeAccessTradeAccess says what trading a symbol allows.
disabled long_only short_only close_only fulltrading_ends_atstringUTC time, RFC 3339.
trading_starts_atstringA contract trades only inside its life (futures expire); nil = no limit. UTC time, RFC 3339.
updated_atstringUTC time, RFC 3339.
versionintegervolume_limitstring0 = unlimited Exact decimal as a string. Never parse it into a binary float for money or prices.
volume_maxstringExact decimal as a string. Never parse it into a binary float for money or prices.
volume_minstringExact decimal as a string. Never parse it into a binary float for money or prices.
volume_stepstringExact decimal as a string. Never parse it into a binary float for money or prices.
Returns
Promise<Symbol>The answer's
data.Errors
400
invalid_input: invalid input401
auth.session_expired: session expired, sign in again403
auth.csrf_invalid: request refused: reload the page and try again403
auth.invalid_terminal: this terminal cannot be used here403
auth.otp_enrol_required: your group requires one-time codes: set them up to continue403
auth.password_change_required: you must change your password first403
forbidden: you do not have access to this action404
not_found: not found409
conflict: already exists500
internal: something went wrongts
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}/restoreRestore 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 · pathrequiredSymbol id.
Returns
Promise<Symbol>The answer's
data.Errors
400
invalid_input: invalid input401
auth.session_expired: session expired, sign in again403
auth.csrf_invalid: request refused: reload the page and try again403
auth.invalid_terminal: this terminal cannot be used here403
auth.otp_enrol_required: your group requires one-time codes: set them up to continue403
auth.password_change_required: you must change your password first403
forbidden: you do not have access to this action404
not_found: not found409
conflict: already exists500
internal: something went wrongts
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}/swapsGet 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 · pathrequiredSymbol id.
Returns
Promise<Swaps>The answer's
data.Errors
400
invalid_input: invalid input401
auth.session_expired: session expired, sign in again403
auth.invalid_terminal: this terminal cannot be used here403
auth.otp_enrol_required: your group requires one-time codes: set them up to continue403
auth.password_change_required: you must change your password first403
forbidden: you do not have access to this action404
not_found: not found500
internal: something went wrongts
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>