Market Data
Prices, market-level trades, depth, candles, etc.
Statistics and throttled market data for all spot markets. Recalculated every 0.5s
List of spot market summaries
Trading symbol (e.g., BTCRUSDPERP, WETHRUSD)
BTCRUSDPERPPattern: ^[A-Za-z0-9]+$Time when the spot market summary was last calculated (milliseconds)
174792708994624-hour trading volume in USD
917833.49891Pattern: ^\d+(\.\d+)?([eE][+-]?\d+)?$Absolute 24-hour price change
92.6272285500004Pattern: ^-?\d+(\.\d+)?([eE][+-]?\d+)?$Current oracle price: the Stork price for the market's base token, quoted in USDC (also called rUSD in reya network)
2666.48162040777Pattern: ^-?\d+(\.\d+)?([eE][+-]?\d+)?$Last spot orderbook mid price, at the moment of the last market summary update. Omitted when the book is empty or one-sided.
2666.48166680625Pattern: ^-?\d+(\.\d+)?([eE][+-]?\d+)?$Standardized error codes for API responses. Branch on error, not the free-text
message or HTTP status. Every venue rejection on REST uses HTTP 400 with a
RequestError body. The order-entry WebSocket returns the same code and optional
retryAfterMs in its { ok: false, error } response. HTTP 429 is reserved for
infrastructure-level (per-IP) limits in front of the API and is never a venue
verdict.
Validation and authorization:
INPUT_VALIDATION_ERROR: correct the request's fields or order-class combination before resubmitting. Immutable fields on a modify must match the existing order.SYMBOL_NOT_FOUND_ERROR,NO_ACCOUNTS_FOUND_ERROR: the requested market or account data is unavailable; check the request and current market/account state.NUMERIC_OVERFLOW_ERROR,PRICE_QTY_BOUNDS_ERROR: a numeric value is out of range, or price/quantity is invalid for the market. Check price increments and quantity limits.UNAUTHORIZED_SIGNATURE_ERROR: the signature is invalid or unauthorized.UNAUTHORIZED_ACCOUNT_ERROR: the signer is not permitted to act on the target order. For an armed protective stop, modify and cancel require the signer that created it.INVALID_NONCE_ERROR: use a fresh, monotonically increasing nonce for the signer and re-sign.ORDER_DEADLINE_PASSED_ERROR,ORDER_DEADLINE_TOO_HIGH_ERROR: the signature'sdeadlinehas passed or is too far in the future. Correct it and re-sign. This deadline controls request acceptance, not the lifetime of an accepted order.ORDER_EXPIRES_TOO_SOON_ERROR: a GTT order'sexpiresAfterleaves insufficient time for execution and settlement. Choose a later expiry and re-sign. GTT orders can be cancelled before their signed expiry to allow settlement; for a protective stop this applies to both its armed phase and its fired child.SERVICE_DISABLED_ERROR,TRADING_HALTED_ERROR: order entry is unavailable for the market. Check market availability before submitting again.DUPLICATE_CLIENT_ORDER_ID_ERROR: the client ID belongs to a live order. Reconcile that order before submitting another.ORDER_NOT_FOUND_ERROR: the target order was not found. Refresh its state before retrying.EMPTY_MODIFY_ERROR: a LIMIT modification makes no change. An armed trigger may be re-signed at unchanged prices.MODIFY_QTY_BELOW_FILLED_ERROR: the modified total quantity must exceed the quantity already filled.POST_ONLY_WOULD_CROSS_ERROR: the order would execute immediately. Choose a non-crossing price or change the post-only intent and re-sign.- The
*_OTHER_ERRORcodes are operation-specific failures without a more specific code. Usemessagefor display or troubleshooting; do not parse it as a stable machine-readable contract.
Pre-trade risk checks:
ACCOUNT_BELOW_LIQUIDATION_MARGIN_ERROR: the account does not meet the required liquidation-margin or balance conditions.ACCOUNT_BELOW_INITIAL_MARGIN_ERROR: the proposed trade does not meet the account's initial-margin or collateral requirements. An account already below initial margin may trade only when the trade improves its health.INSUFFICIENT_BALANCE_ERROR: the account cannot fund the order.OPEN_INTEREST_CAP_ERROR,OPEN_INTEREST_BUDGET_ERROR: the trade exceeds the market's available open-interest capacity.REDUCE_ONLY_CONDITION_NOT_MET_ERROR: the order would not strictly reduce the current position, for example because there is no position, the side is wrong, or the size would reverse it.
A request refused by risk checks is rejected in full. A rejected create produces no
order; a rejected modify leaves the existing order unchanged. These failures require
a change in account or market state, a smaller order, more collateral, or a user
decision; do not automatically retry them unchanged. Resting-order cancellations
appear separately as cancelReason: RISK_CANCELLED. A protective stop whose child
fails risk checks is cancelled with RISK_REJECTED; see CancelReason.
Protective stops:
TRIGGER_IOC_MUST_NOT_EXPIRE_ERROR: an IOC trigger cannot carryexpiresAfter. Only GTT orders carry an expiry; GTC and IOC must omit it. Invalid time-in-force/expiry combinations can also returnINPUT_VALIDATION_ERROR. Correct the combination and re-sign.TRIGGER_LIMIT_OUTSIDE_BAND_ERROR: the stop'slimitPxis outside the permitted range aroundtriggerPx, or stops are unavailable for the market. Move the limit closer to the trigger and re-sign when the price is out of range. If the message indicates stops are unavailable, changing the price will not resolve it.TRIGGER_ALREADY_EXISTS_ERROR: the account already has an armed stop of the same type on that market. At most one stop-loss and one take-profit may be armed per account and market. Modify or cancel the existing stop before replacing it.
Rate limits and resting-order caps:
RATE_LIMITED_ERROR: the account's request budget for this operation is exhausted. Create and modify share a placement budget; single cancels, bulk cancels, and cancel-all-after control have separate budgets. Budgets are shared across markets, signers, REST, and WebSocket requests for the same account. Wait at leastretryAfterMsmilliseconds before retrying. This is a minimum wait, not a reserved request slot; concurrent traffic can use the available budget. Disarming an armed cancel-all-after countdown is never throttled. A disarm when no countdown is armed can be throttled.OPEN_ORDER_COUNT_EXCEEDED_ERROR: a new resting order would exceed the account's total or per-market resting-order count. Cancel orders or allow them to fill before placing more. Modifications do not increase the count.OPEN_ORDER_NOTIONAL_EXCEEDED_ERROR: the account's combined resting-order notional would exceed its limit. Notional is remaining quantity multiplied by limit price for resting GTC/GTT orders. Creates are checked against the submitted quantity before any immediate fills; modifications are checked against the resulting notional. IOC orders and armed triggers are exempt; fired trigger children that rest count toward the limits. Cancel or shrink resting orders, or submit a smaller order.
Resting-order cap errors carry no retryAfterMs: waiting alone does not resolve
them. CAPACITY_LIMITED_ERROR means the venue temporarily cannot accept a create or
modify. It carries no retry hint; use backoff with jitter. Cancels and
cancel-all-after operations are not refused for venue capacity, though their
separate account rate limits still apply.
Temporary availability:
CROSSING_ORDERS_TEMPORARILY_UNAVAILABLE_ERROR: an order that would execute immediately cannot currently pass the required pre-trade checks. Retry after a short delay. Existing resting orders remain in place; non-crossing orders and cancellations remain available.SERVICE_UNAVAILABLE_ERROR: the request was not accepted. Account-owner, signature or permission checks were unavailable before dispatch, or the transport did not send the request (including a full outbound queue). Re-sign with a fresh nonce and resubmit, retaining the sameclientOrderIdwhen supplied. Back off while the service remains unavailable. An unchanged nonce may already be below the signer's nonce floor because a later request was accepted.ORDER_OUTCOME_UNKNOWN_ERROR: the transport failed after the request may have reached the matching engine. The operation may have been applied. Reconcile open orders and executions before resubmitting; never replace an unresolved attempt with a fresh nonce. Retain the complete signed request, including operation, account, market/filter scope, nonce, and order identifiers. Responses do not provide an acceptance receipt or an outcome-query mechanism. Absence from open orders is not proof of failure: the order may have filled, and read data can lag. Executions correlate by order/fill IDs, not request nonces. Insufficient or ambiguous evidence remains unresolved. ForcancelAllAfter, open orders do not establish whether a timer was armed, refreshed, or disarmed.
Permission errors such as NOT_WHITELISTED_ERROR and ACCOUNT_SUSPENDED_ERROR are
not resolved by automatic retries. Contact support if an expected operation is
refused.
Retry policy: retry unchanged after a short delay for
CROSSING_ORDERS_TEMPORARILY_UNAVAILABLE_ERROR; re-sign with a fresh nonce for
SERVICE_UNAVAILABLE_ERROR; reconcile first for
ORDER_OUTCOME_UNKNOWN_ERROR; retry
RATE_LIMITED_ERROR after at least retryAfterMs; retry CAPACITY_LIMITED_ERROR
using backoff with jitter. Correct validation failures and re-sign where required.
Reconcile order state before retrying an unanswered request, because a transport
timeout or disconnect does not establish that the request was rejected.
Internal server error
GET /v2/spotMarkets/summary HTTP/1.1
Accept: */*
[
{
"symbol": "BTCRUSDPERP",
"updatedAt": 1747927089946,
"volume24h": "917833.49891",
"pxChange24h": "92.6272285500004",
"oraclePrice": "2666.48162040777",
"throttledMidPrice": "2666.48166680625",
"ANY_ADDITIONAL_PROPERTY": "anything"
}
]Statistics and throttled market data for a specific spot market. Recalculated every 0.5s
Trading symbol (e.g., BTCRUSDPERP, WETHRUSD)
BTCRUSDPERPPattern: ^[A-Za-z0-9]+$Spot market summary data
Trading symbol (e.g., BTCRUSDPERP, WETHRUSD)
BTCRUSDPERPPattern: ^[A-Za-z0-9]+$Time when the spot market summary was last calculated (milliseconds)
174792708994624-hour trading volume in USD
917833.49891Pattern: ^\d+(\.\d+)?([eE][+-]?\d+)?$Absolute 24-hour price change
92.6272285500004Pattern: ^-?\d+(\.\d+)?([eE][+-]?\d+)?$Current oracle price: the Stork price for the market's base token, quoted in USDC (also called rUSD in reya network)
2666.48162040777Pattern: ^-?\d+(\.\d+)?([eE][+-]?\d+)?$Last spot orderbook mid price, at the moment of the last market summary update. Omitted when the book is empty or one-sided.
2666.48166680625Pattern: ^-?\d+(\.\d+)?([eE][+-]?\d+)?$Standardized error codes for API responses. Branch on error, not the free-text
message or HTTP status. Every venue rejection on REST uses HTTP 400 with a
RequestError body. The order-entry WebSocket returns the same code and optional
retryAfterMs in its { ok: false, error } response. HTTP 429 is reserved for
infrastructure-level (per-IP) limits in front of the API and is never a venue
verdict.
Validation and authorization:
INPUT_VALIDATION_ERROR: correct the request's fields or order-class combination before resubmitting. Immutable fields on a modify must match the existing order.SYMBOL_NOT_FOUND_ERROR,NO_ACCOUNTS_FOUND_ERROR: the requested market or account data is unavailable; check the request and current market/account state.NUMERIC_OVERFLOW_ERROR,PRICE_QTY_BOUNDS_ERROR: a numeric value is out of range, or price/quantity is invalid for the market. Check price increments and quantity limits.UNAUTHORIZED_SIGNATURE_ERROR: the signature is invalid or unauthorized.UNAUTHORIZED_ACCOUNT_ERROR: the signer is not permitted to act on the target order. For an armed protective stop, modify and cancel require the signer that created it.INVALID_NONCE_ERROR: use a fresh, monotonically increasing nonce for the signer and re-sign.ORDER_DEADLINE_PASSED_ERROR,ORDER_DEADLINE_TOO_HIGH_ERROR: the signature'sdeadlinehas passed or is too far in the future. Correct it and re-sign. This deadline controls request acceptance, not the lifetime of an accepted order.ORDER_EXPIRES_TOO_SOON_ERROR: a GTT order'sexpiresAfterleaves insufficient time for execution and settlement. Choose a later expiry and re-sign. GTT orders can be cancelled before their signed expiry to allow settlement; for a protective stop this applies to both its armed phase and its fired child.SERVICE_DISABLED_ERROR,TRADING_HALTED_ERROR: order entry is unavailable for the market. Check market availability before submitting again.DUPLICATE_CLIENT_ORDER_ID_ERROR: the client ID belongs to a live order. Reconcile that order before submitting another.ORDER_NOT_FOUND_ERROR: the target order was not found. Refresh its state before retrying.EMPTY_MODIFY_ERROR: a LIMIT modification makes no change. An armed trigger may be re-signed at unchanged prices.MODIFY_QTY_BELOW_FILLED_ERROR: the modified total quantity must exceed the quantity already filled.POST_ONLY_WOULD_CROSS_ERROR: the order would execute immediately. Choose a non-crossing price or change the post-only intent and re-sign.- The
*_OTHER_ERRORcodes are operation-specific failures without a more specific code. Usemessagefor display or troubleshooting; do not parse it as a stable machine-readable contract.
Pre-trade risk checks:
ACCOUNT_BELOW_LIQUIDATION_MARGIN_ERROR: the account does not meet the required liquidation-margin or balance conditions.ACCOUNT_BELOW_INITIAL_MARGIN_ERROR: the proposed trade does not meet the account's initial-margin or collateral requirements. An account already below initial margin may trade only when the trade improves its health.INSUFFICIENT_BALANCE_ERROR: the account cannot fund the order.OPEN_INTEREST_CAP_ERROR,OPEN_INTEREST_BUDGET_ERROR: the trade exceeds the market's available open-interest capacity.REDUCE_ONLY_CONDITION_NOT_MET_ERROR: the order would not strictly reduce the current position, for example because there is no position, the side is wrong, or the size would reverse it.
A request refused by risk checks is rejected in full. A rejected create produces no
order; a rejected modify leaves the existing order unchanged. These failures require
a change in account or market state, a smaller order, more collateral, or a user
decision; do not automatically retry them unchanged. Resting-order cancellations
appear separately as cancelReason: RISK_CANCELLED. A protective stop whose child
fails risk checks is cancelled with RISK_REJECTED; see CancelReason.
Protective stops:
TRIGGER_IOC_MUST_NOT_EXPIRE_ERROR: an IOC trigger cannot carryexpiresAfter. Only GTT orders carry an expiry; GTC and IOC must omit it. Invalid time-in-force/expiry combinations can also returnINPUT_VALIDATION_ERROR. Correct the combination and re-sign.TRIGGER_LIMIT_OUTSIDE_BAND_ERROR: the stop'slimitPxis outside the permitted range aroundtriggerPx, or stops are unavailable for the market. Move the limit closer to the trigger and re-sign when the price is out of range. If the message indicates stops are unavailable, changing the price will not resolve it.TRIGGER_ALREADY_EXISTS_ERROR: the account already has an armed stop of the same type on that market. At most one stop-loss and one take-profit may be armed per account and market. Modify or cancel the existing stop before replacing it.
Rate limits and resting-order caps:
RATE_LIMITED_ERROR: the account's request budget for this operation is exhausted. Create and modify share a placement budget; single cancels, bulk cancels, and cancel-all-after control have separate budgets. Budgets are shared across markets, signers, REST, and WebSocket requests for the same account. Wait at leastretryAfterMsmilliseconds before retrying. This is a minimum wait, not a reserved request slot; concurrent traffic can use the available budget. Disarming an armed cancel-all-after countdown is never throttled. A disarm when no countdown is armed can be throttled.OPEN_ORDER_COUNT_EXCEEDED_ERROR: a new resting order would exceed the account's total or per-market resting-order count. Cancel orders or allow them to fill before placing more. Modifications do not increase the count.OPEN_ORDER_NOTIONAL_EXCEEDED_ERROR: the account's combined resting-order notional would exceed its limit. Notional is remaining quantity multiplied by limit price for resting GTC/GTT orders. Creates are checked against the submitted quantity before any immediate fills; modifications are checked against the resulting notional. IOC orders and armed triggers are exempt; fired trigger children that rest count toward the limits. Cancel or shrink resting orders, or submit a smaller order.
Resting-order cap errors carry no retryAfterMs: waiting alone does not resolve
them. CAPACITY_LIMITED_ERROR means the venue temporarily cannot accept a create or
modify. It carries no retry hint; use backoff with jitter. Cancels and
cancel-all-after operations are not refused for venue capacity, though their
separate account rate limits still apply.
Temporary availability:
CROSSING_ORDERS_TEMPORARILY_UNAVAILABLE_ERROR: an order that would execute immediately cannot currently pass the required pre-trade checks. Retry after a short delay. Existing resting orders remain in place; non-crossing orders and cancellations remain available.SERVICE_UNAVAILABLE_ERROR: the request was not accepted. Account-owner, signature or permission checks were unavailable before dispatch, or the transport did not send the request (including a full outbound queue). Re-sign with a fresh nonce and resubmit, retaining the sameclientOrderIdwhen supplied. Back off while the service remains unavailable. An unchanged nonce may already be below the signer's nonce floor because a later request was accepted.ORDER_OUTCOME_UNKNOWN_ERROR: the transport failed after the request may have reached the matching engine. The operation may have been applied. Reconcile open orders and executions before resubmitting; never replace an unresolved attempt with a fresh nonce. Retain the complete signed request, including operation, account, market/filter scope, nonce, and order identifiers. Responses do not provide an acceptance receipt or an outcome-query mechanism. Absence from open orders is not proof of failure: the order may have filled, and read data can lag. Executions correlate by order/fill IDs, not request nonces. Insufficient or ambiguous evidence remains unresolved. ForcancelAllAfter, open orders do not establish whether a timer was armed, refreshed, or disarmed.
Permission errors such as NOT_WHITELISTED_ERROR and ACCOUNT_SUSPENDED_ERROR are
not resolved by automatic retries. Contact support if an expected operation is
refused.
Retry policy: retry unchanged after a short delay for
CROSSING_ORDERS_TEMPORARILY_UNAVAILABLE_ERROR; re-sign with a fresh nonce for
SERVICE_UNAVAILABLE_ERROR; reconcile first for
ORDER_OUTCOME_UNKNOWN_ERROR; retry
RATE_LIMITED_ERROR after at least retryAfterMs; retry CAPACITY_LIMITED_ERROR
using backoff with jitter. Correct validation failures and re-sign where required.
Reconcile order state before retrying an unanswered request, because a transport
timeout or disconnect does not establish that the request was rejected.
Internal server error
GET /v2/spotMarket/{symbol}/summary HTTP/1.1
Accept: */*
{
"symbol": "BTCRUSDPERP",
"updatedAt": 1747927089946,
"volume24h": "917833.49891",
"pxChange24h": "92.6272285500004",
"oraclePrice": "2666.48162040777",
"throttledMidPrice": "2666.48166680625",
"ANY_ADDITIONAL_PROPERTY": "anything"
}Perp market summary route mirroring the /spotMarkets/summary naming. Statistics and throttled market data for all perp markets. Recalculated every 0.5s
List of perp market summaries
Trading symbol (e.g., BTCRUSDPERP, WETHRUSD)
BTCRUSDPERPPattern: ^[A-Za-z0-9]+$Time when the market summary was last calculated (milliseconds)
1747927089946Total open interest quantity
154.741Pattern: ^\d+(\.\d+)?([eE][+-]?\d+)?$Current hourly funding rate
-0.000509373441021089Pattern: ^-?\d+(\.\d+)?([eE][+-]?\d+)?$Current reference value of funding accrued by one unit of exposure; there is one funding value per market and per direction, with short v long funding values differing possibly due to Auto-Deleveraging (ADL)
412142.26Pattern: ^-?\d+(\.\d+)?([eE][+-]?\d+)?$Current reference value of funding accrued by one unit of exposure; there is one funding value per market and per direction, with short v long funding values differing possibly due to Auto-Deleveraging (ADL)
412142.26Pattern: ^-?\d+(\.\d+)?([eE][+-]?\d+)?$917833.49891Pattern: ^\d+(\.\d+)?([eE][+-]?\d+)?$92.6272285500004Pattern: ^-?\d+(\.\d+)?([eE][+-]?\d+)?$Mark price at the last market summary update: the median of available impact-price, index-plus-premium, and CEX-mark values. Used for PnL, margin, and liquidation calculations.
2666.48162040777Pattern: ^-?\d+(\.\d+)?([eE][+-]?\d+)?$Stork index price for the market's underlying, sourced from CEX feeds. Absent when no fresh index tick is available.
2666.12048917322Pattern: ^-?\d+(\.\d+)?([eE][+-]?\d+)?$Last mid price, at the moment of the last market summary update. Absent on an empty or one-sided book.
2666.48166680625Pattern: ^-?\d+(\.\d+)?([eE][+-]?\d+)?$Timestamp of the last price update (milliseconds)
1747927089597Standardized error codes for API responses. Branch on error, not the free-text
message or HTTP status. Every venue rejection on REST uses HTTP 400 with a
RequestError body. The order-entry WebSocket returns the same code and optional
retryAfterMs in its { ok: false, error } response. HTTP 429 is reserved for
infrastructure-level (per-IP) limits in front of the API and is never a venue
verdict.
Validation and authorization:
INPUT_VALIDATION_ERROR: correct the request's fields or order-class combination before resubmitting. Immutable fields on a modify must match the existing order.SYMBOL_NOT_FOUND_ERROR,NO_ACCOUNTS_FOUND_ERROR: the requested market or account data is unavailable; check the request and current market/account state.NUMERIC_OVERFLOW_ERROR,PRICE_QTY_BOUNDS_ERROR: a numeric value is out of range, or price/quantity is invalid for the market. Check price increments and quantity limits.UNAUTHORIZED_SIGNATURE_ERROR: the signature is invalid or unauthorized.UNAUTHORIZED_ACCOUNT_ERROR: the signer is not permitted to act on the target order. For an armed protective stop, modify and cancel require the signer that created it.INVALID_NONCE_ERROR: use a fresh, monotonically increasing nonce for the signer and re-sign.ORDER_DEADLINE_PASSED_ERROR,ORDER_DEADLINE_TOO_HIGH_ERROR: the signature'sdeadlinehas passed or is too far in the future. Correct it and re-sign. This deadline controls request acceptance, not the lifetime of an accepted order.ORDER_EXPIRES_TOO_SOON_ERROR: a GTT order'sexpiresAfterleaves insufficient time for execution and settlement. Choose a later expiry and re-sign. GTT orders can be cancelled before their signed expiry to allow settlement; for a protective stop this applies to both its armed phase and its fired child.SERVICE_DISABLED_ERROR,TRADING_HALTED_ERROR: order entry is unavailable for the market. Check market availability before submitting again.DUPLICATE_CLIENT_ORDER_ID_ERROR: the client ID belongs to a live order. Reconcile that order before submitting another.ORDER_NOT_FOUND_ERROR: the target order was not found. Refresh its state before retrying.EMPTY_MODIFY_ERROR: a LIMIT modification makes no change. An armed trigger may be re-signed at unchanged prices.MODIFY_QTY_BELOW_FILLED_ERROR: the modified total quantity must exceed the quantity already filled.POST_ONLY_WOULD_CROSS_ERROR: the order would execute immediately. Choose a non-crossing price or change the post-only intent and re-sign.- The
*_OTHER_ERRORcodes are operation-specific failures without a more specific code. Usemessagefor display or troubleshooting; do not parse it as a stable machine-readable contract.
Pre-trade risk checks:
ACCOUNT_BELOW_LIQUIDATION_MARGIN_ERROR: the account does not meet the required liquidation-margin or balance conditions.ACCOUNT_BELOW_INITIAL_MARGIN_ERROR: the proposed trade does not meet the account's initial-margin or collateral requirements. An account already below initial margin may trade only when the trade improves its health.INSUFFICIENT_BALANCE_ERROR: the account cannot fund the order.OPEN_INTEREST_CAP_ERROR,OPEN_INTEREST_BUDGET_ERROR: the trade exceeds the market's available open-interest capacity.REDUCE_ONLY_CONDITION_NOT_MET_ERROR: the order would not strictly reduce the current position, for example because there is no position, the side is wrong, or the size would reverse it.
A request refused by risk checks is rejected in full. A rejected create produces no
order; a rejected modify leaves the existing order unchanged. These failures require
a change in account or market state, a smaller order, more collateral, or a user
decision; do not automatically retry them unchanged. Resting-order cancellations
appear separately as cancelReason: RISK_CANCELLED. A protective stop whose child
fails risk checks is cancelled with RISK_REJECTED; see CancelReason.
Protective stops:
TRIGGER_IOC_MUST_NOT_EXPIRE_ERROR: an IOC trigger cannot carryexpiresAfter. Only GTT orders carry an expiry; GTC and IOC must omit it. Invalid time-in-force/expiry combinations can also returnINPUT_VALIDATION_ERROR. Correct the combination and re-sign.TRIGGER_LIMIT_OUTSIDE_BAND_ERROR: the stop'slimitPxis outside the permitted range aroundtriggerPx, or stops are unavailable for the market. Move the limit closer to the trigger and re-sign when the price is out of range. If the message indicates stops are unavailable, changing the price will not resolve it.TRIGGER_ALREADY_EXISTS_ERROR: the account already has an armed stop of the same type on that market. At most one stop-loss and one take-profit may be armed per account and market. Modify or cancel the existing stop before replacing it.
Rate limits and resting-order caps:
RATE_LIMITED_ERROR: the account's request budget for this operation is exhausted. Create and modify share a placement budget; single cancels, bulk cancels, and cancel-all-after control have separate budgets. Budgets are shared across markets, signers, REST, and WebSocket requests for the same account. Wait at leastretryAfterMsmilliseconds before retrying. This is a minimum wait, not a reserved request slot; concurrent traffic can use the available budget. Disarming an armed cancel-all-after countdown is never throttled. A disarm when no countdown is armed can be throttled.OPEN_ORDER_COUNT_EXCEEDED_ERROR: a new resting order would exceed the account's total or per-market resting-order count. Cancel orders or allow them to fill before placing more. Modifications do not increase the count.OPEN_ORDER_NOTIONAL_EXCEEDED_ERROR: the account's combined resting-order notional would exceed its limit. Notional is remaining quantity multiplied by limit price for resting GTC/GTT orders. Creates are checked against the submitted quantity before any immediate fills; modifications are checked against the resulting notional. IOC orders and armed triggers are exempt; fired trigger children that rest count toward the limits. Cancel or shrink resting orders, or submit a smaller order.
Resting-order cap errors carry no retryAfterMs: waiting alone does not resolve
them. CAPACITY_LIMITED_ERROR means the venue temporarily cannot accept a create or
modify. It carries no retry hint; use backoff with jitter. Cancels and
cancel-all-after operations are not refused for venue capacity, though their
separate account rate limits still apply.
Temporary availability:
CROSSING_ORDERS_TEMPORARILY_UNAVAILABLE_ERROR: an order that would execute immediately cannot currently pass the required pre-trade checks. Retry after a short delay. Existing resting orders remain in place; non-crossing orders and cancellations remain available.SERVICE_UNAVAILABLE_ERROR: the request was not accepted. Account-owner, signature or permission checks were unavailable before dispatch, or the transport did not send the request (including a full outbound queue). Re-sign with a fresh nonce and resubmit, retaining the sameclientOrderIdwhen supplied. Back off while the service remains unavailable. An unchanged nonce may already be below the signer's nonce floor because a later request was accepted.ORDER_OUTCOME_UNKNOWN_ERROR: the transport failed after the request may have reached the matching engine. The operation may have been applied. Reconcile open orders and executions before resubmitting; never replace an unresolved attempt with a fresh nonce. Retain the complete signed request, including operation, account, market/filter scope, nonce, and order identifiers. Responses do not provide an acceptance receipt or an outcome-query mechanism. Absence from open orders is not proof of failure: the order may have filled, and read data can lag. Executions correlate by order/fill IDs, not request nonces. Insufficient or ambiguous evidence remains unresolved. ForcancelAllAfter, open orders do not establish whether a timer was armed, refreshed, or disarmed.
Permission errors such as NOT_WHITELISTED_ERROR and ACCOUNT_SUSPENDED_ERROR are
not resolved by automatic retries. Contact support if an expected operation is
refused.
Retry policy: retry unchanged after a short delay for
CROSSING_ORDERS_TEMPORARILY_UNAVAILABLE_ERROR; re-sign with a fresh nonce for
SERVICE_UNAVAILABLE_ERROR; reconcile first for
ORDER_OUTCOME_UNKNOWN_ERROR; retry
RATE_LIMITED_ERROR after at least retryAfterMs; retry CAPACITY_LIMITED_ERROR
using backoff with jitter. Correct validation failures and re-sign where required.
Reconcile order state before retrying an unanswered request, because a transport
timeout or disconnect does not establish that the request was rejected.
Internal server error
GET /v2/perpMarkets/summary HTTP/1.1
Accept: */*
[
{
"symbol": "BTCRUSDPERP",
"updatedAt": 1747927089946,
"oiQty": "154.741",
"fundingRate": "-0.000509373441021089",
"longFundingValue": "412142.26",
"shortFundingValue": "412142.26",
"volume24h": "917833.49891",
"pxChange24h": "92.6272285500004",
"markPrice": "2666.48162040777",
"oraclePrice": "2666.12048917322",
"throttledMidPrice": "2666.48166680625",
"pricesUpdatedAt": 1747927089597,
"ANY_ADDITIONAL_PROPERTY": "anything"
}
]Perp market summary route mirroring the /spotMarket/{symbol}/summary naming. Statistics and throttled data for a specific perp market. Recalculated every 0.5s
Trading symbol (e.g., BTCRUSDPERP, WETHRUSD)
BTCRUSDPERPPattern: ^[A-Za-z0-9]+$Market summary
Trading symbol (e.g., BTCRUSDPERP, WETHRUSD)
BTCRUSDPERPPattern: ^[A-Za-z0-9]+$Time when the market summary was last calculated (milliseconds)
1747927089946Total open interest quantity
154.741Pattern: ^\d+(\.\d+)?([eE][+-]?\d+)?$Current hourly funding rate
-0.000509373441021089Pattern: ^-?\d+(\.\d+)?([eE][+-]?\d+)?$Current reference value of funding accrued by one unit of exposure; there is one funding value per market and per direction, with short v long funding values differing possibly due to Auto-Deleveraging (ADL)
412142.26Pattern: ^-?\d+(\.\d+)?([eE][+-]?\d+)?$Current reference value of funding accrued by one unit of exposure; there is one funding value per market and per direction, with short v long funding values differing possibly due to Auto-Deleveraging (ADL)
412142.26Pattern: ^-?\d+(\.\d+)?([eE][+-]?\d+)?$917833.49891Pattern: ^\d+(\.\d+)?([eE][+-]?\d+)?$92.6272285500004Pattern: ^-?\d+(\.\d+)?([eE][+-]?\d+)?$Mark price at the last market summary update: the median of available impact-price, index-plus-premium, and CEX-mark values. Used for PnL, margin, and liquidation calculations.
2666.48162040777Pattern: ^-?\d+(\.\d+)?([eE][+-]?\d+)?$Stork index price for the market's underlying, sourced from CEX feeds. Absent when no fresh index tick is available.
2666.12048917322Pattern: ^-?\d+(\.\d+)?([eE][+-]?\d+)?$Last mid price, at the moment of the last market summary update. Absent on an empty or one-sided book.
2666.48166680625Pattern: ^-?\d+(\.\d+)?([eE][+-]?\d+)?$Timestamp of the last price update (milliseconds)
1747927089597Standardized error codes for API responses. Branch on error, not the free-text
message or HTTP status. Every venue rejection on REST uses HTTP 400 with a
RequestError body. The order-entry WebSocket returns the same code and optional
retryAfterMs in its { ok: false, error } response. HTTP 429 is reserved for
infrastructure-level (per-IP) limits in front of the API and is never a venue
verdict.
Validation and authorization:
INPUT_VALIDATION_ERROR: correct the request's fields or order-class combination before resubmitting. Immutable fields on a modify must match the existing order.SYMBOL_NOT_FOUND_ERROR,NO_ACCOUNTS_FOUND_ERROR: the requested market or account data is unavailable; check the request and current market/account state.NUMERIC_OVERFLOW_ERROR,PRICE_QTY_BOUNDS_ERROR: a numeric value is out of range, or price/quantity is invalid for the market. Check price increments and quantity limits.UNAUTHORIZED_SIGNATURE_ERROR: the signature is invalid or unauthorized.UNAUTHORIZED_ACCOUNT_ERROR: the signer is not permitted to act on the target order. For an armed protective stop, modify and cancel require the signer that created it.INVALID_NONCE_ERROR: use a fresh, monotonically increasing nonce for the signer and re-sign.ORDER_DEADLINE_PASSED_ERROR,ORDER_DEADLINE_TOO_HIGH_ERROR: the signature'sdeadlinehas passed or is too far in the future. Correct it and re-sign. This deadline controls request acceptance, not the lifetime of an accepted order.ORDER_EXPIRES_TOO_SOON_ERROR: a GTT order'sexpiresAfterleaves insufficient time for execution and settlement. Choose a later expiry and re-sign. GTT orders can be cancelled before their signed expiry to allow settlement; for a protective stop this applies to both its armed phase and its fired child.SERVICE_DISABLED_ERROR,TRADING_HALTED_ERROR: order entry is unavailable for the market. Check market availability before submitting again.DUPLICATE_CLIENT_ORDER_ID_ERROR: the client ID belongs to a live order. Reconcile that order before submitting another.ORDER_NOT_FOUND_ERROR: the target order was not found. Refresh its state before retrying.EMPTY_MODIFY_ERROR: a LIMIT modification makes no change. An armed trigger may be re-signed at unchanged prices.MODIFY_QTY_BELOW_FILLED_ERROR: the modified total quantity must exceed the quantity already filled.POST_ONLY_WOULD_CROSS_ERROR: the order would execute immediately. Choose a non-crossing price or change the post-only intent and re-sign.- The
*_OTHER_ERRORcodes are operation-specific failures without a more specific code. Usemessagefor display or troubleshooting; do not parse it as a stable machine-readable contract.
Pre-trade risk checks:
ACCOUNT_BELOW_LIQUIDATION_MARGIN_ERROR: the account does not meet the required liquidation-margin or balance conditions.ACCOUNT_BELOW_INITIAL_MARGIN_ERROR: the proposed trade does not meet the account's initial-margin or collateral requirements. An account already below initial margin may trade only when the trade improves its health.INSUFFICIENT_BALANCE_ERROR: the account cannot fund the order.OPEN_INTEREST_CAP_ERROR,OPEN_INTEREST_BUDGET_ERROR: the trade exceeds the market's available open-interest capacity.REDUCE_ONLY_CONDITION_NOT_MET_ERROR: the order would not strictly reduce the current position, for example because there is no position, the side is wrong, or the size would reverse it.
A request refused by risk checks is rejected in full. A rejected create produces no
order; a rejected modify leaves the existing order unchanged. These failures require
a change in account or market state, a smaller order, more collateral, or a user
decision; do not automatically retry them unchanged. Resting-order cancellations
appear separately as cancelReason: RISK_CANCELLED. A protective stop whose child
fails risk checks is cancelled with RISK_REJECTED; see CancelReason.
Protective stops:
TRIGGER_IOC_MUST_NOT_EXPIRE_ERROR: an IOC trigger cannot carryexpiresAfter. Only GTT orders carry an expiry; GTC and IOC must omit it. Invalid time-in-force/expiry combinations can also returnINPUT_VALIDATION_ERROR. Correct the combination and re-sign.TRIGGER_LIMIT_OUTSIDE_BAND_ERROR: the stop'slimitPxis outside the permitted range aroundtriggerPx, or stops are unavailable for the market. Move the limit closer to the trigger and re-sign when the price is out of range. If the message indicates stops are unavailable, changing the price will not resolve it.TRIGGER_ALREADY_EXISTS_ERROR: the account already has an armed stop of the same type on that market. At most one stop-loss and one take-profit may be armed per account and market. Modify or cancel the existing stop before replacing it.
Rate limits and resting-order caps:
RATE_LIMITED_ERROR: the account's request budget for this operation is exhausted. Create and modify share a placement budget; single cancels, bulk cancels, and cancel-all-after control have separate budgets. Budgets are shared across markets, signers, REST, and WebSocket requests for the same account. Wait at leastretryAfterMsmilliseconds before retrying. This is a minimum wait, not a reserved request slot; concurrent traffic can use the available budget. Disarming an armed cancel-all-after countdown is never throttled. A disarm when no countdown is armed can be throttled.OPEN_ORDER_COUNT_EXCEEDED_ERROR: a new resting order would exceed the account's total or per-market resting-order count. Cancel orders or allow them to fill before placing more. Modifications do not increase the count.OPEN_ORDER_NOTIONAL_EXCEEDED_ERROR: the account's combined resting-order notional would exceed its limit. Notional is remaining quantity multiplied by limit price for resting GTC/GTT orders. Creates are checked against the submitted quantity before any immediate fills; modifications are checked against the resulting notional. IOC orders and armed triggers are exempt; fired trigger children that rest count toward the limits. Cancel or shrink resting orders, or submit a smaller order.
Resting-order cap errors carry no retryAfterMs: waiting alone does not resolve
them. CAPACITY_LIMITED_ERROR means the venue temporarily cannot accept a create or
modify. It carries no retry hint; use backoff with jitter. Cancels and
cancel-all-after operations are not refused for venue capacity, though their
separate account rate limits still apply.
Temporary availability:
CROSSING_ORDERS_TEMPORARILY_UNAVAILABLE_ERROR: an order that would execute immediately cannot currently pass the required pre-trade checks. Retry after a short delay. Existing resting orders remain in place; non-crossing orders and cancellations remain available.SERVICE_UNAVAILABLE_ERROR: the request was not accepted. Account-owner, signature or permission checks were unavailable before dispatch, or the transport did not send the request (including a full outbound queue). Re-sign with a fresh nonce and resubmit, retaining the sameclientOrderIdwhen supplied. Back off while the service remains unavailable. An unchanged nonce may already be below the signer's nonce floor because a later request was accepted.ORDER_OUTCOME_UNKNOWN_ERROR: the transport failed after the request may have reached the matching engine. The operation may have been applied. Reconcile open orders and executions before resubmitting; never replace an unresolved attempt with a fresh nonce. Retain the complete signed request, including operation, account, market/filter scope, nonce, and order identifiers. Responses do not provide an acceptance receipt or an outcome-query mechanism. Absence from open orders is not proof of failure: the order may have filled, and read data can lag. Executions correlate by order/fill IDs, not request nonces. Insufficient or ambiguous evidence remains unresolved. ForcancelAllAfter, open orders do not establish whether a timer was armed, refreshed, or disarmed.
Permission errors such as NOT_WHITELISTED_ERROR and ACCOUNT_SUSPENDED_ERROR are
not resolved by automatic retries. Contact support if an expected operation is
refused.
Retry policy: retry unchanged after a short delay for
CROSSING_ORDERS_TEMPORARILY_UNAVAILABLE_ERROR; re-sign with a fresh nonce for
SERVICE_UNAVAILABLE_ERROR; reconcile first for
ORDER_OUTCOME_UNKNOWN_ERROR; retry
RATE_LIMITED_ERROR after at least retryAfterMs; retry CAPACITY_LIMITED_ERROR
using backoff with jitter. Correct validation failures and re-sign where required.
Reconcile order state before retrying an unanswered request, because a transport
timeout or disconnect does not establish that the request was rejected.
Internal server error
GET /v2/perpMarket/{symbol}/summary HTTP/1.1
Accept: */*
{
"symbol": "BTCRUSDPERP",
"updatedAt": 1747927089946,
"oiQty": "154.741",
"fundingRate": "-0.000509373441021089",
"longFundingValue": "412142.26",
"shortFundingValue": "412142.26",
"volume24h": "917833.49891",
"pxChange24h": "92.6272285500004",
"markPrice": "2666.48162040777",
"oraclePrice": "2666.12048917322",
"throttledMidPrice": "2666.48166680625",
"pricesUpdatedAt": 1747927089597,
"ANY_ADDITIONAL_PROPERTY": "anything"
}Asset Stork oracle prices. This feed deliberately omits the AMM-era poolPrice field.
List of asset oracle prices
RUSDPattern: ^[A-Za-z0-9]+$Asset oracle price supplied by Stork.
1.0000Pattern: ^-?\d+(\.\d+)?([eE][+-]?\d+)?$Last update timestamp (milliseconds)
1747927089946Standardized error codes for API responses. Branch on error, not the free-text
message or HTTP status. Every venue rejection on REST uses HTTP 400 with a
RequestError body. The order-entry WebSocket returns the same code and optional
retryAfterMs in its { ok: false, error } response. HTTP 429 is reserved for
infrastructure-level (per-IP) limits in front of the API and is never a venue
verdict.
Validation and authorization:
INPUT_VALIDATION_ERROR: correct the request's fields or order-class combination before resubmitting. Immutable fields on a modify must match the existing order.SYMBOL_NOT_FOUND_ERROR,NO_ACCOUNTS_FOUND_ERROR: the requested market or account data is unavailable; check the request and current market/account state.NUMERIC_OVERFLOW_ERROR,PRICE_QTY_BOUNDS_ERROR: a numeric value is out of range, or price/quantity is invalid for the market. Check price increments and quantity limits.UNAUTHORIZED_SIGNATURE_ERROR: the signature is invalid or unauthorized.UNAUTHORIZED_ACCOUNT_ERROR: the signer is not permitted to act on the target order. For an armed protective stop, modify and cancel require the signer that created it.INVALID_NONCE_ERROR: use a fresh, monotonically increasing nonce for the signer and re-sign.ORDER_DEADLINE_PASSED_ERROR,ORDER_DEADLINE_TOO_HIGH_ERROR: the signature'sdeadlinehas passed or is too far in the future. Correct it and re-sign. This deadline controls request acceptance, not the lifetime of an accepted order.ORDER_EXPIRES_TOO_SOON_ERROR: a GTT order'sexpiresAfterleaves insufficient time for execution and settlement. Choose a later expiry and re-sign. GTT orders can be cancelled before their signed expiry to allow settlement; for a protective stop this applies to both its armed phase and its fired child.SERVICE_DISABLED_ERROR,TRADING_HALTED_ERROR: order entry is unavailable for the market. Check market availability before submitting again.DUPLICATE_CLIENT_ORDER_ID_ERROR: the client ID belongs to a live order. Reconcile that order before submitting another.ORDER_NOT_FOUND_ERROR: the target order was not found. Refresh its state before retrying.EMPTY_MODIFY_ERROR: a LIMIT modification makes no change. An armed trigger may be re-signed at unchanged prices.MODIFY_QTY_BELOW_FILLED_ERROR: the modified total quantity must exceed the quantity already filled.POST_ONLY_WOULD_CROSS_ERROR: the order would execute immediately. Choose a non-crossing price or change the post-only intent and re-sign.- The
*_OTHER_ERRORcodes are operation-specific failures without a more specific code. Usemessagefor display or troubleshooting; do not parse it as a stable machine-readable contract.
Pre-trade risk checks:
ACCOUNT_BELOW_LIQUIDATION_MARGIN_ERROR: the account does not meet the required liquidation-margin or balance conditions.ACCOUNT_BELOW_INITIAL_MARGIN_ERROR: the proposed trade does not meet the account's initial-margin or collateral requirements. An account already below initial margin may trade only when the trade improves its health.INSUFFICIENT_BALANCE_ERROR: the account cannot fund the order.OPEN_INTEREST_CAP_ERROR,OPEN_INTEREST_BUDGET_ERROR: the trade exceeds the market's available open-interest capacity.REDUCE_ONLY_CONDITION_NOT_MET_ERROR: the order would not strictly reduce the current position, for example because there is no position, the side is wrong, or the size would reverse it.
A request refused by risk checks is rejected in full. A rejected create produces no
order; a rejected modify leaves the existing order unchanged. These failures require
a change in account or market state, a smaller order, more collateral, or a user
decision; do not automatically retry them unchanged. Resting-order cancellations
appear separately as cancelReason: RISK_CANCELLED. A protective stop whose child
fails risk checks is cancelled with RISK_REJECTED; see CancelReason.
Protective stops:
TRIGGER_IOC_MUST_NOT_EXPIRE_ERROR: an IOC trigger cannot carryexpiresAfter. Only GTT orders carry an expiry; GTC and IOC must omit it. Invalid time-in-force/expiry combinations can also returnINPUT_VALIDATION_ERROR. Correct the combination and re-sign.TRIGGER_LIMIT_OUTSIDE_BAND_ERROR: the stop'slimitPxis outside the permitted range aroundtriggerPx, or stops are unavailable for the market. Move the limit closer to the trigger and re-sign when the price is out of range. If the message indicates stops are unavailable, changing the price will not resolve it.TRIGGER_ALREADY_EXISTS_ERROR: the account already has an armed stop of the same type on that market. At most one stop-loss and one take-profit may be armed per account and market. Modify or cancel the existing stop before replacing it.
Rate limits and resting-order caps:
RATE_LIMITED_ERROR: the account's request budget for this operation is exhausted. Create and modify share a placement budget; single cancels, bulk cancels, and cancel-all-after control have separate budgets. Budgets are shared across markets, signers, REST, and WebSocket requests for the same account. Wait at leastretryAfterMsmilliseconds before retrying. This is a minimum wait, not a reserved request slot; concurrent traffic can use the available budget. Disarming an armed cancel-all-after countdown is never throttled. A disarm when no countdown is armed can be throttled.OPEN_ORDER_COUNT_EXCEEDED_ERROR: a new resting order would exceed the account's total or per-market resting-order count. Cancel orders or allow them to fill before placing more. Modifications do not increase the count.OPEN_ORDER_NOTIONAL_EXCEEDED_ERROR: the account's combined resting-order notional would exceed its limit. Notional is remaining quantity multiplied by limit price for resting GTC/GTT orders. Creates are checked against the submitted quantity before any immediate fills; modifications are checked against the resulting notional. IOC orders and armed triggers are exempt; fired trigger children that rest count toward the limits. Cancel or shrink resting orders, or submit a smaller order.
Resting-order cap errors carry no retryAfterMs: waiting alone does not resolve
them. CAPACITY_LIMITED_ERROR means the venue temporarily cannot accept a create or
modify. It carries no retry hint; use backoff with jitter. Cancels and
cancel-all-after operations are not refused for venue capacity, though their
separate account rate limits still apply.
Temporary availability:
CROSSING_ORDERS_TEMPORARILY_UNAVAILABLE_ERROR: an order that would execute immediately cannot currently pass the required pre-trade checks. Retry after a short delay. Existing resting orders remain in place; non-crossing orders and cancellations remain available.SERVICE_UNAVAILABLE_ERROR: the request was not accepted. Account-owner, signature or permission checks were unavailable before dispatch, or the transport did not send the request (including a full outbound queue). Re-sign with a fresh nonce and resubmit, retaining the sameclientOrderIdwhen supplied. Back off while the service remains unavailable. An unchanged nonce may already be below the signer's nonce floor because a later request was accepted.ORDER_OUTCOME_UNKNOWN_ERROR: the transport failed after the request may have reached the matching engine. The operation may have been applied. Reconcile open orders and executions before resubmitting; never replace an unresolved attempt with a fresh nonce. Retain the complete signed request, including operation, account, market/filter scope, nonce, and order identifiers. Responses do not provide an acceptance receipt or an outcome-query mechanism. Absence from open orders is not proof of failure: the order may have filled, and read data can lag. Executions correlate by order/fill IDs, not request nonces. Insufficient or ambiguous evidence remains unresolved. ForcancelAllAfter, open orders do not establish whether a timer was armed, refreshed, or disarmed.
Permission errors such as NOT_WHITELISTED_ERROR and ACCOUNT_SUSPENDED_ERROR are
not resolved by automatic retries. Contact support if an expected operation is
refused.
Retry policy: retry unchanged after a short delay for
CROSSING_ORDERS_TEMPORARILY_UNAVAILABLE_ERROR; re-sign with a fresh nonce for
SERVICE_UNAVAILABLE_ERROR; reconcile first for
ORDER_OUTCOME_UNKNOWN_ERROR; retry
RATE_LIMITED_ERROR after at least retryAfterMs; retry CAPACITY_LIMITED_ERROR
using backoff with jitter. Correct validation failures and re-sign where required.
Reconcile order state before retrying an unanswered request, because a transport
timeout or disconnect does not establish that the request was rejected.
Internal server error
GET /v2/assetOraclePrices HTTP/1.1
Accept: */*
[
{
"asset": "RUSD",
"oraclePrice": "1.0000",
"updatedAt": 1747927089946,
"ANY_ADDITIONAL_PROPERTY": "anything"
}
]Returns up to 100 perp executions for a given market.
Trading symbol (e.g., BTCRUSDPERP, WETHRUSD)
BTCRUSDPERPPattern: ^[A-Za-z0-9]+$Return results at or after this time (inclusive lower bound). Millisecond POSIX timestamp, matched against the endpoint's record timestamp. Execution and bust endpoints use on-chain block timestamps; orderHistory uses the order event timestamp exposed as lastUpdateAt.
1756733379000Return results at or before this time (inclusive upper bound). Millisecond POSIX timestamp, matched against the endpoint's record timestamp. Execution and bust endpoints use on-chain block timestamps; orderHistory uses the order event timestamp exposed as lastUpdateAt. Results are returned newest-first and capped at a maximum that varies by endpoint. Because this bound is inclusive, passing the oldest timestamp from the previous page can repeat boundary rows; clients can deduplicate overlap or subtract 1ms when same-ms boundary ties are not relevant.
1756733679000Filter perp executions by their exact response type. Omit to return executions of all types.
LIQUIDATIONPossible values: List of perp executions
Standardized error codes for API responses. Branch on error, not the free-text
message or HTTP status. Every venue rejection on REST uses HTTP 400 with a
RequestError body. The order-entry WebSocket returns the same code and optional
retryAfterMs in its { ok: false, error } response. HTTP 429 is reserved for
infrastructure-level (per-IP) limits in front of the API and is never a venue
verdict.
Validation and authorization:
INPUT_VALIDATION_ERROR: correct the request's fields or order-class combination before resubmitting. Immutable fields on a modify must match the existing order.SYMBOL_NOT_FOUND_ERROR,NO_ACCOUNTS_FOUND_ERROR: the requested market or account data is unavailable; check the request and current market/account state.NUMERIC_OVERFLOW_ERROR,PRICE_QTY_BOUNDS_ERROR: a numeric value is out of range, or price/quantity is invalid for the market. Check price increments and quantity limits.UNAUTHORIZED_SIGNATURE_ERROR: the signature is invalid or unauthorized.UNAUTHORIZED_ACCOUNT_ERROR: the signer is not permitted to act on the target order. For an armed protective stop, modify and cancel require the signer that created it.INVALID_NONCE_ERROR: use a fresh, monotonically increasing nonce for the signer and re-sign.ORDER_DEADLINE_PASSED_ERROR,ORDER_DEADLINE_TOO_HIGH_ERROR: the signature'sdeadlinehas passed or is too far in the future. Correct it and re-sign. This deadline controls request acceptance, not the lifetime of an accepted order.ORDER_EXPIRES_TOO_SOON_ERROR: a GTT order'sexpiresAfterleaves insufficient time for execution and settlement. Choose a later expiry and re-sign. GTT orders can be cancelled before their signed expiry to allow settlement; for a protective stop this applies to both its armed phase and its fired child.SERVICE_DISABLED_ERROR,TRADING_HALTED_ERROR: order entry is unavailable for the market. Check market availability before submitting again.DUPLICATE_CLIENT_ORDER_ID_ERROR: the client ID belongs to a live order. Reconcile that order before submitting another.ORDER_NOT_FOUND_ERROR: the target order was not found. Refresh its state before retrying.EMPTY_MODIFY_ERROR: a LIMIT modification makes no change. An armed trigger may be re-signed at unchanged prices.MODIFY_QTY_BELOW_FILLED_ERROR: the modified total quantity must exceed the quantity already filled.POST_ONLY_WOULD_CROSS_ERROR: the order would execute immediately. Choose a non-crossing price or change the post-only intent and re-sign.- The
*_OTHER_ERRORcodes are operation-specific failures without a more specific code. Usemessagefor display or troubleshooting; do not parse it as a stable machine-readable contract.
Pre-trade risk checks:
ACCOUNT_BELOW_LIQUIDATION_MARGIN_ERROR: the account does not meet the required liquidation-margin or balance conditions.ACCOUNT_BELOW_INITIAL_MARGIN_ERROR: the proposed trade does not meet the account's initial-margin or collateral requirements. An account already below initial margin may trade only when the trade improves its health.INSUFFICIENT_BALANCE_ERROR: the account cannot fund the order.OPEN_INTEREST_CAP_ERROR,OPEN_INTEREST_BUDGET_ERROR: the trade exceeds the market's available open-interest capacity.REDUCE_ONLY_CONDITION_NOT_MET_ERROR: the order would not strictly reduce the current position, for example because there is no position, the side is wrong, or the size would reverse it.
A request refused by risk checks is rejected in full. A rejected create produces no
order; a rejected modify leaves the existing order unchanged. These failures require
a change in account or market state, a smaller order, more collateral, or a user
decision; do not automatically retry them unchanged. Resting-order cancellations
appear separately as cancelReason: RISK_CANCELLED. A protective stop whose child
fails risk checks is cancelled with RISK_REJECTED; see CancelReason.
Protective stops:
TRIGGER_IOC_MUST_NOT_EXPIRE_ERROR: an IOC trigger cannot carryexpiresAfter. Only GTT orders carry an expiry; GTC and IOC must omit it. Invalid time-in-force/expiry combinations can also returnINPUT_VALIDATION_ERROR. Correct the combination and re-sign.TRIGGER_LIMIT_OUTSIDE_BAND_ERROR: the stop'slimitPxis outside the permitted range aroundtriggerPx, or stops are unavailable for the market. Move the limit closer to the trigger and re-sign when the price is out of range. If the message indicates stops are unavailable, changing the price will not resolve it.TRIGGER_ALREADY_EXISTS_ERROR: the account already has an armed stop of the same type on that market. At most one stop-loss and one take-profit may be armed per account and market. Modify or cancel the existing stop before replacing it.
Rate limits and resting-order caps:
RATE_LIMITED_ERROR: the account's request budget for this operation is exhausted. Create and modify share a placement budget; single cancels, bulk cancels, and cancel-all-after control have separate budgets. Budgets are shared across markets, signers, REST, and WebSocket requests for the same account. Wait at leastretryAfterMsmilliseconds before retrying. This is a minimum wait, not a reserved request slot; concurrent traffic can use the available budget. Disarming an armed cancel-all-after countdown is never throttled. A disarm when no countdown is armed can be throttled.OPEN_ORDER_COUNT_EXCEEDED_ERROR: a new resting order would exceed the account's total or per-market resting-order count. Cancel orders or allow them to fill before placing more. Modifications do not increase the count.OPEN_ORDER_NOTIONAL_EXCEEDED_ERROR: the account's combined resting-order notional would exceed its limit. Notional is remaining quantity multiplied by limit price for resting GTC/GTT orders. Creates are checked against the submitted quantity before any immediate fills; modifications are checked against the resulting notional. IOC orders and armed triggers are exempt; fired trigger children that rest count toward the limits. Cancel or shrink resting orders, or submit a smaller order.
Resting-order cap errors carry no retryAfterMs: waiting alone does not resolve
them. CAPACITY_LIMITED_ERROR means the venue temporarily cannot accept a create or
modify. It carries no retry hint; use backoff with jitter. Cancels and
cancel-all-after operations are not refused for venue capacity, though their
separate account rate limits still apply.
Temporary availability:
CROSSING_ORDERS_TEMPORARILY_UNAVAILABLE_ERROR: an order that would execute immediately cannot currently pass the required pre-trade checks. Retry after a short delay. Existing resting orders remain in place; non-crossing orders and cancellations remain available.SERVICE_UNAVAILABLE_ERROR: the request was not accepted. Account-owner, signature or permission checks were unavailable before dispatch, or the transport did not send the request (including a full outbound queue). Re-sign with a fresh nonce and resubmit, retaining the sameclientOrderIdwhen supplied. Back off while the service remains unavailable. An unchanged nonce may already be below the signer's nonce floor because a later request was accepted.ORDER_OUTCOME_UNKNOWN_ERROR: the transport failed after the request may have reached the matching engine. The operation may have been applied. Reconcile open orders and executions before resubmitting; never replace an unresolved attempt with a fresh nonce. Retain the complete signed request, including operation, account, market/filter scope, nonce, and order identifiers. Responses do not provide an acceptance receipt or an outcome-query mechanism. Absence from open orders is not proof of failure: the order may have filled, and read data can lag. Executions correlate by order/fill IDs, not request nonces. Insufficient or ambiguous evidence remains unresolved. ForcancelAllAfter, open orders do not establish whether a timer was armed, refreshed, or disarmed.
Permission errors such as NOT_WHITELISTED_ERROR and ACCOUNT_SUSPENDED_ERROR are
not resolved by automatic retries. Contact support if an expected operation is
refused.
Retry policy: retry unchanged after a short delay for
CROSSING_ORDERS_TEMPORARILY_UNAVAILABLE_ERROR; re-sign with a fresh nonce for
SERVICE_UNAVAILABLE_ERROR; reconcile first for
ORDER_OUTCOME_UNKNOWN_ERROR; retry
RATE_LIMITED_ERROR after at least retryAfterMs; retry CAPACITY_LIMITED_ERROR
using backoff with jitter. Correct validation failures and re-sign where required.
Reconcile order state before retrying an unanswered request, because a transport
timeout or disconnect does not establish that the request was rejected.
Internal server error
GET /v2/market/{symbol}/perpExecutions HTTP/1.1
Accept: */*
{
"data": [
{
"exchangeId": 1,
"symbol": "BTCRUSDPERP",
"takerAccountId": 12345,
"makerAccountId": 67890,
"takerOrderId": "63552420354981888",
"makerOrderId": "63552420037263360",
"qty": "1.0",
"side": "B",
"price": "43000.00",
"takerFee": "0.50",
"protocolFeeCredit": "0.30",
"referrerFeeCredit": "0.05",
"takerRebateCredit": "0.10",
"poolFeeCredit": "0.05",
"makerFee": "-0.10",
"takerOpeningFee": "0.25",
"makerOpeningFee": "-0.05",
"type": "ORDER_MATCH",
"timestamp": 1747927089946,
"sequenceNumber": 152954,
"fillId": "42",
"takerRealizedPnl": "12.50",
"makerRealizedPnl": "-12.50",
"takerPriceVariationPnl": "15.00",
"makerPriceVariationPnl": "-15.00",
"takerFundingPnl": "-2.50",
"makerFundingPnl": "2.50",
"ANY_ADDITIONAL_PROPERTY": "anything"
}
],
"meta": {
"limit": 100,
"count": 50,
"endTime": 1756733579000,
"startTime": 1756733679000,
"ANY_ADDITIONAL_PROPERTY": "anything"
},
"ANY_ADDITIONAL_PROPERTY": "anything"
}Returns an L2 order book snapshot with aggregated price levels for the specified market. Supports both spot and perp markets.
By default the top 100 aggregated price levels per side are returned. Pass the optional limit query parameter to request between 1 and 1,000 levels per side — the limit best (highest) bids and the limit best (lowest) asks. Values above 1,000 are clamped to 1,000; other out-of-contract values fall back to the default of 100.
Returns HTTP 503 with SERVICE_UNAVAILABLE_ERROR while this server's depth mirror is bootstrapping or cannot decode the market-data feed. A cached book is not served during that condition. Retry the same read after backing off; no signing nonce is involved. Other API routes remain available, and depth reads resume after recovery.
Trading symbol (e.g., BTCRUSDPERP, WETHRUSD)
BTCRUSDPERPPattern: ^[A-Za-z0-9]+$Optional cap on the number of aggregated price levels returned per side. The default is 100 and the maximum is 1,000. When set to N within the declared range, the response contains the top N levels on each side — the N best (highest) bids and the N best (lowest) asks. Values above the maximum are clamped to 1,000; other out-of-contract values are not rejected and instead fall back to the default of 100.
100Example: 10Depth snapshot
Trading symbol (e.g., BTCRUSDPERP, WETHRUSD)
BTCRUSDPERPPattern: ^[A-Za-z0-9]+$Timestamp in milliseconds associated with the latest depth state. Comparable across markets. It is not a feed-liveness signal: a quiet market may retain an old timestamp.
1747927809946Literal discriminator for a bounded depth snapshot.
Standardized error codes for API responses. Branch on error, not the free-text
message or HTTP status. Every venue rejection on REST uses HTTP 400 with a
RequestError body. The order-entry WebSocket returns the same code and optional
retryAfterMs in its { ok: false, error } response. HTTP 429 is reserved for
infrastructure-level (per-IP) limits in front of the API and is never a venue
verdict.
Validation and authorization:
INPUT_VALIDATION_ERROR: correct the request's fields or order-class combination before resubmitting. Immutable fields on a modify must match the existing order.SYMBOL_NOT_FOUND_ERROR,NO_ACCOUNTS_FOUND_ERROR: the requested market or account data is unavailable; check the request and current market/account state.NUMERIC_OVERFLOW_ERROR,PRICE_QTY_BOUNDS_ERROR: a numeric value is out of range, or price/quantity is invalid for the market. Check price increments and quantity limits.UNAUTHORIZED_SIGNATURE_ERROR: the signature is invalid or unauthorized.UNAUTHORIZED_ACCOUNT_ERROR: the signer is not permitted to act on the target order. For an armed protective stop, modify and cancel require the signer that created it.INVALID_NONCE_ERROR: use a fresh, monotonically increasing nonce for the signer and re-sign.ORDER_DEADLINE_PASSED_ERROR,ORDER_DEADLINE_TOO_HIGH_ERROR: the signature'sdeadlinehas passed or is too far in the future. Correct it and re-sign. This deadline controls request acceptance, not the lifetime of an accepted order.ORDER_EXPIRES_TOO_SOON_ERROR: a GTT order'sexpiresAfterleaves insufficient time for execution and settlement. Choose a later expiry and re-sign. GTT orders can be cancelled before their signed expiry to allow settlement; for a protective stop this applies to both its armed phase and its fired child.SERVICE_DISABLED_ERROR,TRADING_HALTED_ERROR: order entry is unavailable for the market. Check market availability before submitting again.DUPLICATE_CLIENT_ORDER_ID_ERROR: the client ID belongs to a live order. Reconcile that order before submitting another.ORDER_NOT_FOUND_ERROR: the target order was not found. Refresh its state before retrying.EMPTY_MODIFY_ERROR: a LIMIT modification makes no change. An armed trigger may be re-signed at unchanged prices.MODIFY_QTY_BELOW_FILLED_ERROR: the modified total quantity must exceed the quantity already filled.POST_ONLY_WOULD_CROSS_ERROR: the order would execute immediately. Choose a non-crossing price or change the post-only intent and re-sign.- The
*_OTHER_ERRORcodes are operation-specific failures without a more specific code. Usemessagefor display or troubleshooting; do not parse it as a stable machine-readable contract.
Pre-trade risk checks:
ACCOUNT_BELOW_LIQUIDATION_MARGIN_ERROR: the account does not meet the required liquidation-margin or balance conditions.ACCOUNT_BELOW_INITIAL_MARGIN_ERROR: the proposed trade does not meet the account's initial-margin or collateral requirements. An account already below initial margin may trade only when the trade improves its health.INSUFFICIENT_BALANCE_ERROR: the account cannot fund the order.OPEN_INTEREST_CAP_ERROR,OPEN_INTEREST_BUDGET_ERROR: the trade exceeds the market's available open-interest capacity.REDUCE_ONLY_CONDITION_NOT_MET_ERROR: the order would not strictly reduce the current position, for example because there is no position, the side is wrong, or the size would reverse it.
A request refused by risk checks is rejected in full. A rejected create produces no
order; a rejected modify leaves the existing order unchanged. These failures require
a change in account or market state, a smaller order, more collateral, or a user
decision; do not automatically retry them unchanged. Resting-order cancellations
appear separately as cancelReason: RISK_CANCELLED. A protective stop whose child
fails risk checks is cancelled with RISK_REJECTED; see CancelReason.
Protective stops:
TRIGGER_IOC_MUST_NOT_EXPIRE_ERROR: an IOC trigger cannot carryexpiresAfter. Only GTT orders carry an expiry; GTC and IOC must omit it. Invalid time-in-force/expiry combinations can also returnINPUT_VALIDATION_ERROR. Correct the combination and re-sign.TRIGGER_LIMIT_OUTSIDE_BAND_ERROR: the stop'slimitPxis outside the permitted range aroundtriggerPx, or stops are unavailable for the market. Move the limit closer to the trigger and re-sign when the price is out of range. If the message indicates stops are unavailable, changing the price will not resolve it.TRIGGER_ALREADY_EXISTS_ERROR: the account already has an armed stop of the same type on that market. At most one stop-loss and one take-profit may be armed per account and market. Modify or cancel the existing stop before replacing it.
Rate limits and resting-order caps:
RATE_LIMITED_ERROR: the account's request budget for this operation is exhausted. Create and modify share a placement budget; single cancels, bulk cancels, and cancel-all-after control have separate budgets. Budgets are shared across markets, signers, REST, and WebSocket requests for the same account. Wait at leastretryAfterMsmilliseconds before retrying. This is a minimum wait, not a reserved request slot; concurrent traffic can use the available budget. Disarming an armed cancel-all-after countdown is never throttled. A disarm when no countdown is armed can be throttled.OPEN_ORDER_COUNT_EXCEEDED_ERROR: a new resting order would exceed the account's total or per-market resting-order count. Cancel orders or allow them to fill before placing more. Modifications do not increase the count.OPEN_ORDER_NOTIONAL_EXCEEDED_ERROR: the account's combined resting-order notional would exceed its limit. Notional is remaining quantity multiplied by limit price for resting GTC/GTT orders. Creates are checked against the submitted quantity before any immediate fills; modifications are checked against the resulting notional. IOC orders and armed triggers are exempt; fired trigger children that rest count toward the limits. Cancel or shrink resting orders, or submit a smaller order.
Resting-order cap errors carry no retryAfterMs: waiting alone does not resolve
them. CAPACITY_LIMITED_ERROR means the venue temporarily cannot accept a create or
modify. It carries no retry hint; use backoff with jitter. Cancels and
cancel-all-after operations are not refused for venue capacity, though their
separate account rate limits still apply.
Temporary availability:
CROSSING_ORDERS_TEMPORARILY_UNAVAILABLE_ERROR: an order that would execute immediately cannot currently pass the required pre-trade checks. Retry after a short delay. Existing resting orders remain in place; non-crossing orders and cancellations remain available.SERVICE_UNAVAILABLE_ERROR: the request was not accepted. Account-owner, signature or permission checks were unavailable before dispatch, or the transport did not send the request (including a full outbound queue). Re-sign with a fresh nonce and resubmit, retaining the sameclientOrderIdwhen supplied. Back off while the service remains unavailable. An unchanged nonce may already be below the signer's nonce floor because a later request was accepted.ORDER_OUTCOME_UNKNOWN_ERROR: the transport failed after the request may have reached the matching engine. The operation may have been applied. Reconcile open orders and executions before resubmitting; never replace an unresolved attempt with a fresh nonce. Retain the complete signed request, including operation, account, market/filter scope, nonce, and order identifiers. Responses do not provide an acceptance receipt or an outcome-query mechanism. Absence from open orders is not proof of failure: the order may have filled, and read data can lag. Executions correlate by order/fill IDs, not request nonces. Insufficient or ambiguous evidence remains unresolved. ForcancelAllAfter, open orders do not establish whether a timer was armed, refreshed, or disarmed.
Permission errors such as NOT_WHITELISTED_ERROR and ACCOUNT_SUSPENDED_ERROR are
not resolved by automatic retries. Contact support if an expected operation is
refused.
Retry policy: retry unchanged after a short delay for
CROSSING_ORDERS_TEMPORARILY_UNAVAILABLE_ERROR; re-sign with a fresh nonce for
SERVICE_UNAVAILABLE_ERROR; reconcile first for
ORDER_OUTCOME_UNKNOWN_ERROR; retry
RATE_LIMITED_ERROR after at least retryAfterMs; retry CAPACITY_LIMITED_ERROR
using backoff with jitter. Correct validation failures and re-sign where required.
Reconcile order state before retrying an unanswered request, because a transport
timeout or disconnect does not establish that the request was rejected.
Internal server error
The local market-depth mirror is temporarily unavailable. Retry after backing off.
GET /v2/market/{symbol}/depth HTTP/1.1
Accept: */*
{
"symbol": "BTCRUSDPERP",
"updatedAt": 1747927809946,
"ANY_ADDITIONAL_PROPERTY": "anything",
"type": "SNAPSHOT",
"bids": [
{
"px": "0.1668",
"qty": "4418.7970",
"ANY_ADDITIONAL_PROPERTY": "anything"
}
],
"asks": [
{
"px": "0.1668",
"qty": "4418.7970",
"ANY_ADDITIONAL_PROPERTY": "anything"
}
]
}Returns up to 100 spot executions for a given market.
Trading symbol (e.g., BTCRUSDPERP, WETHRUSD)
BTCRUSDPERPPattern: ^[A-Za-z0-9]+$Return results at or after this time (inclusive lower bound). Millisecond POSIX timestamp, matched against the endpoint's record timestamp. Execution and bust endpoints use on-chain block timestamps; orderHistory uses the order event timestamp exposed as lastUpdateAt.
1756733379000Return results at or before this time (inclusive upper bound). Millisecond POSIX timestamp, matched against the endpoint's record timestamp. Execution and bust endpoints use on-chain block timestamps; orderHistory uses the order event timestamp exposed as lastUpdateAt. Results are returned newest-first and capped at a maximum that varies by endpoint. Because this bound is inclusive, passing the oldest timestamp from the previous page can repeat boundary rows; clients can deduplicate overlap or subtract 1ms when same-ms boundary ties are not relevant.
1756733679000List of spot executions
Standardized error codes for API responses. Branch on error, not the free-text
message or HTTP status. Every venue rejection on REST uses HTTP 400 with a
RequestError body. The order-entry WebSocket returns the same code and optional
retryAfterMs in its { ok: false, error } response. HTTP 429 is reserved for
infrastructure-level (per-IP) limits in front of the API and is never a venue
verdict.
Validation and authorization:
INPUT_VALIDATION_ERROR: correct the request's fields or order-class combination before resubmitting. Immutable fields on a modify must match the existing order.SYMBOL_NOT_FOUND_ERROR,NO_ACCOUNTS_FOUND_ERROR: the requested market or account data is unavailable; check the request and current market/account state.NUMERIC_OVERFLOW_ERROR,PRICE_QTY_BOUNDS_ERROR: a numeric value is out of range, or price/quantity is invalid for the market. Check price increments and quantity limits.UNAUTHORIZED_SIGNATURE_ERROR: the signature is invalid or unauthorized.UNAUTHORIZED_ACCOUNT_ERROR: the signer is not permitted to act on the target order. For an armed protective stop, modify and cancel require the signer that created it.INVALID_NONCE_ERROR: use a fresh, monotonically increasing nonce for the signer and re-sign.ORDER_DEADLINE_PASSED_ERROR,ORDER_DEADLINE_TOO_HIGH_ERROR: the signature'sdeadlinehas passed or is too far in the future. Correct it and re-sign. This deadline controls request acceptance, not the lifetime of an accepted order.ORDER_EXPIRES_TOO_SOON_ERROR: a GTT order'sexpiresAfterleaves insufficient time for execution and settlement. Choose a later expiry and re-sign. GTT orders can be cancelled before their signed expiry to allow settlement; for a protective stop this applies to both its armed phase and its fired child.SERVICE_DISABLED_ERROR,TRADING_HALTED_ERROR: order entry is unavailable for the market. Check market availability before submitting again.DUPLICATE_CLIENT_ORDER_ID_ERROR: the client ID belongs to a live order. Reconcile that order before submitting another.ORDER_NOT_FOUND_ERROR: the target order was not found. Refresh its state before retrying.EMPTY_MODIFY_ERROR: a LIMIT modification makes no change. An armed trigger may be re-signed at unchanged prices.MODIFY_QTY_BELOW_FILLED_ERROR: the modified total quantity must exceed the quantity already filled.POST_ONLY_WOULD_CROSS_ERROR: the order would execute immediately. Choose a non-crossing price or change the post-only intent and re-sign.- The
*_OTHER_ERRORcodes are operation-specific failures without a more specific code. Usemessagefor display or troubleshooting; do not parse it as a stable machine-readable contract.
Pre-trade risk checks:
ACCOUNT_BELOW_LIQUIDATION_MARGIN_ERROR: the account does not meet the required liquidation-margin or balance conditions.ACCOUNT_BELOW_INITIAL_MARGIN_ERROR: the proposed trade does not meet the account's initial-margin or collateral requirements. An account already below initial margin may trade only when the trade improves its health.INSUFFICIENT_BALANCE_ERROR: the account cannot fund the order.OPEN_INTEREST_CAP_ERROR,OPEN_INTEREST_BUDGET_ERROR: the trade exceeds the market's available open-interest capacity.REDUCE_ONLY_CONDITION_NOT_MET_ERROR: the order would not strictly reduce the current position, for example because there is no position, the side is wrong, or the size would reverse it.
A request refused by risk checks is rejected in full. A rejected create produces no
order; a rejected modify leaves the existing order unchanged. These failures require
a change in account or market state, a smaller order, more collateral, or a user
decision; do not automatically retry them unchanged. Resting-order cancellations
appear separately as cancelReason: RISK_CANCELLED. A protective stop whose child
fails risk checks is cancelled with RISK_REJECTED; see CancelReason.
Protective stops:
TRIGGER_IOC_MUST_NOT_EXPIRE_ERROR: an IOC trigger cannot carryexpiresAfter. Only GTT orders carry an expiry; GTC and IOC must omit it. Invalid time-in-force/expiry combinations can also returnINPUT_VALIDATION_ERROR. Correct the combination and re-sign.TRIGGER_LIMIT_OUTSIDE_BAND_ERROR: the stop'slimitPxis outside the permitted range aroundtriggerPx, or stops are unavailable for the market. Move the limit closer to the trigger and re-sign when the price is out of range. If the message indicates stops are unavailable, changing the price will not resolve it.TRIGGER_ALREADY_EXISTS_ERROR: the account already has an armed stop of the same type on that market. At most one stop-loss and one take-profit may be armed per account and market. Modify or cancel the existing stop before replacing it.
Rate limits and resting-order caps:
RATE_LIMITED_ERROR: the account's request budget for this operation is exhausted. Create and modify share a placement budget; single cancels, bulk cancels, and cancel-all-after control have separate budgets. Budgets are shared across markets, signers, REST, and WebSocket requests for the same account. Wait at leastretryAfterMsmilliseconds before retrying. This is a minimum wait, not a reserved request slot; concurrent traffic can use the available budget. Disarming an armed cancel-all-after countdown is never throttled. A disarm when no countdown is armed can be throttled.OPEN_ORDER_COUNT_EXCEEDED_ERROR: a new resting order would exceed the account's total or per-market resting-order count. Cancel orders or allow them to fill before placing more. Modifications do not increase the count.OPEN_ORDER_NOTIONAL_EXCEEDED_ERROR: the account's combined resting-order notional would exceed its limit. Notional is remaining quantity multiplied by limit price for resting GTC/GTT orders. Creates are checked against the submitted quantity before any immediate fills; modifications are checked against the resulting notional. IOC orders and armed triggers are exempt; fired trigger children that rest count toward the limits. Cancel or shrink resting orders, or submit a smaller order.
Resting-order cap errors carry no retryAfterMs: waiting alone does not resolve
them. CAPACITY_LIMITED_ERROR means the venue temporarily cannot accept a create or
modify. It carries no retry hint; use backoff with jitter. Cancels and
cancel-all-after operations are not refused for venue capacity, though their
separate account rate limits still apply.
Temporary availability:
CROSSING_ORDERS_TEMPORARILY_UNAVAILABLE_ERROR: an order that would execute immediately cannot currently pass the required pre-trade checks. Retry after a short delay. Existing resting orders remain in place; non-crossing orders and cancellations remain available.SERVICE_UNAVAILABLE_ERROR: the request was not accepted. Account-owner, signature or permission checks were unavailable before dispatch, or the transport did not send the request (including a full outbound queue). Re-sign with a fresh nonce and resubmit, retaining the sameclientOrderIdwhen supplied. Back off while the service remains unavailable. An unchanged nonce may already be below the signer's nonce floor because a later request was accepted.ORDER_OUTCOME_UNKNOWN_ERROR: the transport failed after the request may have reached the matching engine. The operation may have been applied. Reconcile open orders and executions before resubmitting; never replace an unresolved attempt with a fresh nonce. Retain the complete signed request, including operation, account, market/filter scope, nonce, and order identifiers. Responses do not provide an acceptance receipt or an outcome-query mechanism. Absence from open orders is not proof of failure: the order may have filled, and read data can lag. Executions correlate by order/fill IDs, not request nonces. Insufficient or ambiguous evidence remains unresolved. ForcancelAllAfter, open orders do not establish whether a timer was armed, refreshed, or disarmed.
Permission errors such as NOT_WHITELISTED_ERROR and ACCOUNT_SUSPENDED_ERROR are
not resolved by automatic retries. Contact support if an expected operation is
refused.
Retry policy: retry unchanged after a short delay for
CROSSING_ORDERS_TEMPORARILY_UNAVAILABLE_ERROR; re-sign with a fresh nonce for
SERVICE_UNAVAILABLE_ERROR; reconcile first for
ORDER_OUTCOME_UNKNOWN_ERROR; retry
RATE_LIMITED_ERROR after at least retryAfterMs; retry CAPACITY_LIMITED_ERROR
using backoff with jitter. Correct validation failures and re-sign where required.
Reconcile order state before retrying an unanswered request, because a transport
timeout or disconnect does not establish that the request was rejected.
Internal server error
GET /v2/market/{symbol}/spotExecutions HTTP/1.1
Accept: */*
{
"data": [
{
"exchangeId": 1,
"symbol": "BTCRUSDPERP",
"takerAccountId": 12345,
"makerAccountId": 67890,
"takerOrderId": "63552420354981888",
"makerOrderId": "63552420037263360",
"side": "B",
"qty": "1.0",
"price": "43000.00",
"takerFee": "0.0",
"type": "ORDER_MATCH",
"timestamp": 1747927089946,
"sequenceNumber": 152954,
"fillId": "42",
"ANY_ADDITIONAL_PROPERTY": "anything"
}
],
"meta": {
"limit": 100,
"count": 50,
"endTime": 1756733579000,
"startTime": 1756733679000,
"ANY_ADDITIONAL_PROPERTY": "anything"
},
"ANY_ADDITIONAL_PROPERTY": "anything"
}Returns up to 100 execution busts (failed fills) for a given market, covering both spot and perp markets. Clients can distinguish spot vs perp entries from the symbol suffix (*RUSDPERP for perp, *RUSD for spot).
Trading symbol (e.g., BTCRUSDPERP, WETHRUSD)
BTCRUSDPERPPattern: ^[A-Za-z0-9]+$Return results at or after this time (inclusive lower bound). Millisecond POSIX timestamp, matched against the endpoint's record timestamp. Execution and bust endpoints use on-chain block timestamps; orderHistory uses the order event timestamp exposed as lastUpdateAt.
1756733379000Return results at or before this time (inclusive upper bound). Millisecond POSIX timestamp, matched against the endpoint's record timestamp. Execution and bust endpoints use on-chain block timestamps; orderHistory uses the order event timestamp exposed as lastUpdateAt. Results are returned newest-first and capped at a maximum that varies by endpoint. Because this bound is inclusive, passing the oldest timestamp from the previous page can repeat boundary rows; clients can deduplicate overlap or subtract 1ms when same-ms boundary ties are not relevant.
1756733679000List of execution busts
Standardized error codes for API responses. Branch on error, not the free-text
message or HTTP status. Every venue rejection on REST uses HTTP 400 with a
RequestError body. The order-entry WebSocket returns the same code and optional
retryAfterMs in its { ok: false, error } response. HTTP 429 is reserved for
infrastructure-level (per-IP) limits in front of the API and is never a venue
verdict.
Validation and authorization:
INPUT_VALIDATION_ERROR: correct the request's fields or order-class combination before resubmitting. Immutable fields on a modify must match the existing order.SYMBOL_NOT_FOUND_ERROR,NO_ACCOUNTS_FOUND_ERROR: the requested market or account data is unavailable; check the request and current market/account state.NUMERIC_OVERFLOW_ERROR,PRICE_QTY_BOUNDS_ERROR: a numeric value is out of range, or price/quantity is invalid for the market. Check price increments and quantity limits.UNAUTHORIZED_SIGNATURE_ERROR: the signature is invalid or unauthorized.UNAUTHORIZED_ACCOUNT_ERROR: the signer is not permitted to act on the target order. For an armed protective stop, modify and cancel require the signer that created it.INVALID_NONCE_ERROR: use a fresh, monotonically increasing nonce for the signer and re-sign.ORDER_DEADLINE_PASSED_ERROR,ORDER_DEADLINE_TOO_HIGH_ERROR: the signature'sdeadlinehas passed or is too far in the future. Correct it and re-sign. This deadline controls request acceptance, not the lifetime of an accepted order.ORDER_EXPIRES_TOO_SOON_ERROR: a GTT order'sexpiresAfterleaves insufficient time for execution and settlement. Choose a later expiry and re-sign. GTT orders can be cancelled before their signed expiry to allow settlement; for a protective stop this applies to both its armed phase and its fired child.SERVICE_DISABLED_ERROR,TRADING_HALTED_ERROR: order entry is unavailable for the market. Check market availability before submitting again.DUPLICATE_CLIENT_ORDER_ID_ERROR: the client ID belongs to a live order. Reconcile that order before submitting another.ORDER_NOT_FOUND_ERROR: the target order was not found. Refresh its state before retrying.EMPTY_MODIFY_ERROR: a LIMIT modification makes no change. An armed trigger may be re-signed at unchanged prices.MODIFY_QTY_BELOW_FILLED_ERROR: the modified total quantity must exceed the quantity already filled.POST_ONLY_WOULD_CROSS_ERROR: the order would execute immediately. Choose a non-crossing price or change the post-only intent and re-sign.- The
*_OTHER_ERRORcodes are operation-specific failures without a more specific code. Usemessagefor display or troubleshooting; do not parse it as a stable machine-readable contract.
Pre-trade risk checks:
ACCOUNT_BELOW_LIQUIDATION_MARGIN_ERROR: the account does not meet the required liquidation-margin or balance conditions.ACCOUNT_BELOW_INITIAL_MARGIN_ERROR: the proposed trade does not meet the account's initial-margin or collateral requirements. An account already below initial margin may trade only when the trade improves its health.INSUFFICIENT_BALANCE_ERROR: the account cannot fund the order.OPEN_INTEREST_CAP_ERROR,OPEN_INTEREST_BUDGET_ERROR: the trade exceeds the market's available open-interest capacity.REDUCE_ONLY_CONDITION_NOT_MET_ERROR: the order would not strictly reduce the current position, for example because there is no position, the side is wrong, or the size would reverse it.
A request refused by risk checks is rejected in full. A rejected create produces no
order; a rejected modify leaves the existing order unchanged. These failures require
a change in account or market state, a smaller order, more collateral, or a user
decision; do not automatically retry them unchanged. Resting-order cancellations
appear separately as cancelReason: RISK_CANCELLED. A protective stop whose child
fails risk checks is cancelled with RISK_REJECTED; see CancelReason.
Protective stops:
TRIGGER_IOC_MUST_NOT_EXPIRE_ERROR: an IOC trigger cannot carryexpiresAfter. Only GTT orders carry an expiry; GTC and IOC must omit it. Invalid time-in-force/expiry combinations can also returnINPUT_VALIDATION_ERROR. Correct the combination and re-sign.TRIGGER_LIMIT_OUTSIDE_BAND_ERROR: the stop'slimitPxis outside the permitted range aroundtriggerPx, or stops are unavailable for the market. Move the limit closer to the trigger and re-sign when the price is out of range. If the message indicates stops are unavailable, changing the price will not resolve it.TRIGGER_ALREADY_EXISTS_ERROR: the account already has an armed stop of the same type on that market. At most one stop-loss and one take-profit may be armed per account and market. Modify or cancel the existing stop before replacing it.
Rate limits and resting-order caps:
RATE_LIMITED_ERROR: the account's request budget for this operation is exhausted. Create and modify share a placement budget; single cancels, bulk cancels, and cancel-all-after control have separate budgets. Budgets are shared across markets, signers, REST, and WebSocket requests for the same account. Wait at leastretryAfterMsmilliseconds before retrying. This is a minimum wait, not a reserved request slot; concurrent traffic can use the available budget. Disarming an armed cancel-all-after countdown is never throttled. A disarm when no countdown is armed can be throttled.OPEN_ORDER_COUNT_EXCEEDED_ERROR: a new resting order would exceed the account's total or per-market resting-order count. Cancel orders or allow them to fill before placing more. Modifications do not increase the count.OPEN_ORDER_NOTIONAL_EXCEEDED_ERROR: the account's combined resting-order notional would exceed its limit. Notional is remaining quantity multiplied by limit price for resting GTC/GTT orders. Creates are checked against the submitted quantity before any immediate fills; modifications are checked against the resulting notional. IOC orders and armed triggers are exempt; fired trigger children that rest count toward the limits. Cancel or shrink resting orders, or submit a smaller order.
Resting-order cap errors carry no retryAfterMs: waiting alone does not resolve
them. CAPACITY_LIMITED_ERROR means the venue temporarily cannot accept a create or
modify. It carries no retry hint; use backoff with jitter. Cancels and
cancel-all-after operations are not refused for venue capacity, though their
separate account rate limits still apply.
Temporary availability:
CROSSING_ORDERS_TEMPORARILY_UNAVAILABLE_ERROR: an order that would execute immediately cannot currently pass the required pre-trade checks. Retry after a short delay. Existing resting orders remain in place; non-crossing orders and cancellations remain available.SERVICE_UNAVAILABLE_ERROR: the request was not accepted. Account-owner, signature or permission checks were unavailable before dispatch, or the transport did not send the request (including a full outbound queue). Re-sign with a fresh nonce and resubmit, retaining the sameclientOrderIdwhen supplied. Back off while the service remains unavailable. An unchanged nonce may already be below the signer's nonce floor because a later request was accepted.ORDER_OUTCOME_UNKNOWN_ERROR: the transport failed after the request may have reached the matching engine. The operation may have been applied. Reconcile open orders and executions before resubmitting; never replace an unresolved attempt with a fresh nonce. Retain the complete signed request, including operation, account, market/filter scope, nonce, and order identifiers. Responses do not provide an acceptance receipt or an outcome-query mechanism. Absence from open orders is not proof of failure: the order may have filled, and read data can lag. Executions correlate by order/fill IDs, not request nonces. Insufficient or ambiguous evidence remains unresolved. ForcancelAllAfter, open orders do not establish whether a timer was armed, refreshed, or disarmed.
Permission errors such as NOT_WHITELISTED_ERROR and ACCOUNT_SUSPENDED_ERROR are
not resolved by automatic retries. Contact support if an expected operation is
refused.
Retry policy: retry unchanged after a short delay for
CROSSING_ORDERS_TEMPORARILY_UNAVAILABLE_ERROR; re-sign with a fresh nonce for
SERVICE_UNAVAILABLE_ERROR; reconcile first for
ORDER_OUTCOME_UNKNOWN_ERROR; retry
RATE_LIMITED_ERROR after at least retryAfterMs; retry CAPACITY_LIMITED_ERROR
using backoff with jitter. Correct validation failures and re-sign where required.
Reconcile order state before retrying an unanswered request, because a transport
timeout or disconnect does not establish that the request was rejected.
Internal server error
GET /v2/market/{symbol}/executionBusts HTTP/1.1
Accept: */*
{
"data": [
{
"symbol": "BTCRUSDPERP",
"takerAccountId": 12345,
"exchangeId": 1,
"makerAccountId": 67890,
"takerOrderId": "63552420354981888",
"makerOrderId": "63552420037263360",
"qty": "1.0",
"side": "B",
"price": "43000.00",
"reason": {
"reasonName": "InvalidSignature"
},
"timestamp": 1747927089946,
"sequenceNumber": 152954,
"fillId": "42",
"ANY_ADDITIONAL_PROPERTY": "anything"
}
],
"meta": {
"limit": 100,
"count": 50,
"endTime": 1756733579000,
"startTime": 1756733679000,
"ANY_ADDITIONAL_PROPERTY": "anything"
},
"ANY_ADDITIONAL_PROPERTY": "anything"
}Returns up to 200 candles for a given market, sorted by time in descending order, and ending at the specified end time.
Trading symbol (e.g., BTCRUSDPERP, WETHRUSD)
BTCRUSDPERPPattern: ^[A-Za-z0-9]+$Candle resolution
1mPossible values: Return results at or before this time (inclusive upper bound). Millisecond POSIX timestamp, matched against the endpoint's record timestamp. Execution and bust endpoints use on-chain block timestamps; orderHistory uses the order event timestamp exposed as lastUpdateAt. Results are returned newest-first and capped at a maximum that varies by endpoint. Because this bound is inclusive, passing the oldest timestamp from the previous page can repeat boundary rows; clients can deduplicate overlap or subtract 1ms when same-ms boundary ties are not relevant.
1756733679000Historical candle data
Array of timestamps (seconds)
[1747804140,1747804200,1747804260]Array of opening prices
["2557.997","2555.386","2560.118"]Array of high prices
["2558.000","2560.699","2560.729"]Array of low prices
["2554.637","2553.436","2559.368"]Array of closing prices
["2555.387","2560.118","2560.439"]Standardized error codes for API responses. Branch on error, not the free-text
message or HTTP status. Every venue rejection on REST uses HTTP 400 with a
RequestError body. The order-entry WebSocket returns the same code and optional
retryAfterMs in its { ok: false, error } response. HTTP 429 is reserved for
infrastructure-level (per-IP) limits in front of the API and is never a venue
verdict.
Validation and authorization:
INPUT_VALIDATION_ERROR: correct the request's fields or order-class combination before resubmitting. Immutable fields on a modify must match the existing order.SYMBOL_NOT_FOUND_ERROR,NO_ACCOUNTS_FOUND_ERROR: the requested market or account data is unavailable; check the request and current market/account state.NUMERIC_OVERFLOW_ERROR,PRICE_QTY_BOUNDS_ERROR: a numeric value is out of range, or price/quantity is invalid for the market. Check price increments and quantity limits.UNAUTHORIZED_SIGNATURE_ERROR: the signature is invalid or unauthorized.UNAUTHORIZED_ACCOUNT_ERROR: the signer is not permitted to act on the target order. For an armed protective stop, modify and cancel require the signer that created it.INVALID_NONCE_ERROR: use a fresh, monotonically increasing nonce for the signer and re-sign.ORDER_DEADLINE_PASSED_ERROR,ORDER_DEADLINE_TOO_HIGH_ERROR: the signature'sdeadlinehas passed or is too far in the future. Correct it and re-sign. This deadline controls request acceptance, not the lifetime of an accepted order.ORDER_EXPIRES_TOO_SOON_ERROR: a GTT order'sexpiresAfterleaves insufficient time for execution and settlement. Choose a later expiry and re-sign. GTT orders can be cancelled before their signed expiry to allow settlement; for a protective stop this applies to both its armed phase and its fired child.SERVICE_DISABLED_ERROR,TRADING_HALTED_ERROR: order entry is unavailable for the market. Check market availability before submitting again.DUPLICATE_CLIENT_ORDER_ID_ERROR: the client ID belongs to a live order. Reconcile that order before submitting another.ORDER_NOT_FOUND_ERROR: the target order was not found. Refresh its state before retrying.EMPTY_MODIFY_ERROR: a LIMIT modification makes no change. An armed trigger may be re-signed at unchanged prices.MODIFY_QTY_BELOW_FILLED_ERROR: the modified total quantity must exceed the quantity already filled.POST_ONLY_WOULD_CROSS_ERROR: the order would execute immediately. Choose a non-crossing price or change the post-only intent and re-sign.- The
*_OTHER_ERRORcodes are operation-specific failures without a more specific code. Usemessagefor display or troubleshooting; do not parse it as a stable machine-readable contract.
Pre-trade risk checks:
ACCOUNT_BELOW_LIQUIDATION_MARGIN_ERROR: the account does not meet the required liquidation-margin or balance conditions.ACCOUNT_BELOW_INITIAL_MARGIN_ERROR: the proposed trade does not meet the account's initial-margin or collateral requirements. An account already below initial margin may trade only when the trade improves its health.INSUFFICIENT_BALANCE_ERROR: the account cannot fund the order.OPEN_INTEREST_CAP_ERROR,OPEN_INTEREST_BUDGET_ERROR: the trade exceeds the market's available open-interest capacity.REDUCE_ONLY_CONDITION_NOT_MET_ERROR: the order would not strictly reduce the current position, for example because there is no position, the side is wrong, or the size would reverse it.
A request refused by risk checks is rejected in full. A rejected create produces no
order; a rejected modify leaves the existing order unchanged. These failures require
a change in account or market state, a smaller order, more collateral, or a user
decision; do not automatically retry them unchanged. Resting-order cancellations
appear separately as cancelReason: RISK_CANCELLED. A protective stop whose child
fails risk checks is cancelled with RISK_REJECTED; see CancelReason.
Protective stops:
TRIGGER_IOC_MUST_NOT_EXPIRE_ERROR: an IOC trigger cannot carryexpiresAfter. Only GTT orders carry an expiry; GTC and IOC must omit it. Invalid time-in-force/expiry combinations can also returnINPUT_VALIDATION_ERROR. Correct the combination and re-sign.TRIGGER_LIMIT_OUTSIDE_BAND_ERROR: the stop'slimitPxis outside the permitted range aroundtriggerPx, or stops are unavailable for the market. Move the limit closer to the trigger and re-sign when the price is out of range. If the message indicates stops are unavailable, changing the price will not resolve it.TRIGGER_ALREADY_EXISTS_ERROR: the account already has an armed stop of the same type on that market. At most one stop-loss and one take-profit may be armed per account and market. Modify or cancel the existing stop before replacing it.
Rate limits and resting-order caps:
RATE_LIMITED_ERROR: the account's request budget for this operation is exhausted. Create and modify share a placement budget; single cancels, bulk cancels, and cancel-all-after control have separate budgets. Budgets are shared across markets, signers, REST, and WebSocket requests for the same account. Wait at leastretryAfterMsmilliseconds before retrying. This is a minimum wait, not a reserved request slot; concurrent traffic can use the available budget. Disarming an armed cancel-all-after countdown is never throttled. A disarm when no countdown is armed can be throttled.OPEN_ORDER_COUNT_EXCEEDED_ERROR: a new resting order would exceed the account's total or per-market resting-order count. Cancel orders or allow them to fill before placing more. Modifications do not increase the count.OPEN_ORDER_NOTIONAL_EXCEEDED_ERROR: the account's combined resting-order notional would exceed its limit. Notional is remaining quantity multiplied by limit price for resting GTC/GTT orders. Creates are checked against the submitted quantity before any immediate fills; modifications are checked against the resulting notional. IOC orders and armed triggers are exempt; fired trigger children that rest count toward the limits. Cancel or shrink resting orders, or submit a smaller order.
Resting-order cap errors carry no retryAfterMs: waiting alone does not resolve
them. CAPACITY_LIMITED_ERROR means the venue temporarily cannot accept a create or
modify. It carries no retry hint; use backoff with jitter. Cancels and
cancel-all-after operations are not refused for venue capacity, though their
separate account rate limits still apply.
Temporary availability:
CROSSING_ORDERS_TEMPORARILY_UNAVAILABLE_ERROR: an order that would execute immediately cannot currently pass the required pre-trade checks. Retry after a short delay. Existing resting orders remain in place; non-crossing orders and cancellations remain available.SERVICE_UNAVAILABLE_ERROR: the request was not accepted. Account-owner, signature or permission checks were unavailable before dispatch, or the transport did not send the request (including a full outbound queue). Re-sign with a fresh nonce and resubmit, retaining the sameclientOrderIdwhen supplied. Back off while the service remains unavailable. An unchanged nonce may already be below the signer's nonce floor because a later request was accepted.ORDER_OUTCOME_UNKNOWN_ERROR: the transport failed after the request may have reached the matching engine. The operation may have been applied. Reconcile open orders and executions before resubmitting; never replace an unresolved attempt with a fresh nonce. Retain the complete signed request, including operation, account, market/filter scope, nonce, and order identifiers. Responses do not provide an acceptance receipt or an outcome-query mechanism. Absence from open orders is not proof of failure: the order may have filled, and read data can lag. Executions correlate by order/fill IDs, not request nonces. Insufficient or ambiguous evidence remains unresolved. ForcancelAllAfter, open orders do not establish whether a timer was armed, refreshed, or disarmed.
Permission errors such as NOT_WHITELISTED_ERROR and ACCOUNT_SUSPENDED_ERROR are
not resolved by automatic retries. Contact support if an expected operation is
refused.
Retry policy: retry unchanged after a short delay for
CROSSING_ORDERS_TEMPORARILY_UNAVAILABLE_ERROR; re-sign with a fresh nonce for
SERVICE_UNAVAILABLE_ERROR; reconcile first for
ORDER_OUTCOME_UNKNOWN_ERROR; retry
RATE_LIMITED_ERROR after at least retryAfterMs; retry CAPACITY_LIMITED_ERROR
using backoff with jitter. Correct validation failures and re-sign where required.
Reconcile order state before retrying an unanswered request, because a transport
timeout or disconnect does not establish that the request was rejected.
Internal server error
GET /v2/candleHistory/{symbol}/{resolution} HTTP/1.1
Accept: */*
{
"t": [
1747804140,
1747804200,
1747804260
],
"o": [
"2557.997",
"2555.386",
"2560.118"
],
"h": [
"2558.000",
"2560.699",
"2560.729"
],
"l": [
"2554.637",
"2553.436",
"2559.368"
],
"c": [
"2555.387",
"2560.118",
"2560.439"
],
"ANY_ADDITIONAL_PROPERTY": "anything"
}Last updated