Skip to main content

REST API

The REST API is read-only apart from POST /action, which is how every state change is submitted — see Signed actions. No authentication is needed for reads.

Base URLs are listed in Networks and endpoints. The interactive, always-current reference is generated from the live schema: Nord API and Proton API. Each deployment also serves its own reference at GET /docs and its schema at GET /openapi.json; treat those as the source of truth if this page and the deployment differ.

Exchange and markets​

EndpointPurpose
GET /infoMarkets, tokens, decimals, and IDs — fetch this first
GET /markets/liveLive pricing state for every market
GET /market/{market_id}/liveLive pricing state for one market
GET /market/{market_id}/orderbookOrderbook snapshot with an updateId
GET /market/{market_id}/statsRolling market statistics
GET /market/{market_id}/history/PT1HHourly market history
GET /tradesTrades, filterable and paginated
GET /order/{order_id} and /order/{order_id}/tradesOne order and its fills
GET /tokens/{token_id}/statsToken statistics
GET /fee/brackets/infoFee tier brackets
GET /market/{market_id}/fees/{fee_kind}/{account_id}Deprecated. Fee for an account in a market, by fill role
GET /timestampServer time, required when signing actions
GET /state/infoEngine version and latest action ID, nonce, timestamp, and paused flag
GET /state/info/histEngine version history by action ID
GET /healthHealth of every service; returns 503 if any is degraded (unstable)
GET /health/{service}Health of one service, such as execution or settlement; returns 503 only if it is degraded (unstable)

Accounts​

EndpointPurpose
GET /user/{pubkey}Accounts owned by a wallet
GET /account/{account_id}Balances, positions, and margin state
GET /account/{account_id}/ordersOrder history
GET /account/{account_id}/orders/openOpen orders
GET /account/{account_id}/position/summaryPosition summary
GET /account/{account_id}/pnl/summaryRealized and unrealized PnL
GET /account/{account_id}/history/{kind}Paginated history
GET /account/{account_id}/triggersPending and active triggers on the account
GET /account/{account_id}/triggers/history/placementsTrigger placement history
GET /account/{account_id}/triggers/history/finalisationsTrigger finalization history
GET /account/{account_id}/fee/tierEffective fee tier
GET /account/{account_id}/fees/withdrawalQuoted withdrawal fee
GET /event/last-acked-nonceHighest acknowledged nonce for a signer
GET /action/last-executed-idLast executed action ID
GET /accounts/liquidations/takesLiquidation takes across all accounts

History kind is one of deposit, withdrawal, transfer, funding, pnl, position, liquidation, fee-tier, vault/deposit, or vault/withdrawal.

Accounts are addressed by numeric account ID, not by wallet address — see Accounts and sessions for how to resolve one.

Liquidation history​

Take-all liquidation history contains one row per transferred market, with its market ID, health transition, and system fee. Preserve all rows for an action. A take-all without positions produces one quote-balance row. For the v22 changes to liquidation history and /health, see the v22 changelog entry.

Vaults​

GET /vaults, GET /vault/{vault_id}, GET /vault/{vault_id}/user/{account_id}, and GET /account/{account_id}/vault-user-states.

EndpointPurpose
GET /vault/{vault_id}/history/configVault configuration changes
GET /vault/{vault_id}/history/depositVault deposits
GET /vault/{vault_id}/history/withdrawalVault withdrawals
GET /vault/{vault_id}/history/epochVault epochs

Conventions​

  • Scaled integers. Prices, sizes, and amounts are integers scaled by the market's priceDecimals / sizeDecimals or the token's decimals. Read them from /info and descale before displaying. A BTCUSD price of 724336 with priceDecimals: 1 is 72433.6.
  • Pagination. History endpoints take pageSize and a cursor (startInclusive), plus since / until RFC3339 bounds where applicable.
  • Timestamps. RFC3339 in requests; /timestamp is the authority for signing.
  • Schemas. GET /openapi.json, GET /proton/openapi.json, and GET /schema.proto are served by every deployment, so you can generate clients and protobuf bindings for the exact version you are talking to.

For anything latency-sensitive, stream instead of polling — WebSocket streams.

These materials are provided for informational purposes only and do not constitute financial, investment, legal, or tax advice, or an offer or solicitation to buy or sell any asset. Trading digital assets and derivatives involves substantial risk, including the possible loss of some or all capital. Products may not be available in all jurisdictions. Users are responsible for evaluating suitability and complying with applicable laws.