Wallet Data
Accounts, positions, trades, etc.
0x6c51275fd01d5dbd2da194e92f920f8598306df2Pattern: ^0x[a-fA-F0-9]{40}$List of accounts
12345Margin Account 1SPOT = account that can only trade spot, MAINPERP = main perp account, SUBPERP = sub perp account
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/wallet/{address}/accounts HTTP/1.1
Accept: */*
[
{
"accountId": 12345,
"name": "Margin Account 1",
"type": "MAINPERP",
"ANY_ADDITIONAL_PROPERTY": "anything"
}
]Returns up to 100 execution busts (failed fills) for a given wallet, covering both spot and perp markets. Use the symbol suffix to distinguish spot from perp busts.
0x6c51275fd01d5dbd2da194e92f920f8598306df2Pattern: ^0x[a-fA-F0-9]{40}$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/wallet/{address}/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 100 perp executions for a given wallet.
0x6c51275fd01d5dbd2da194e92f920f8598306df2Pattern: ^0x[a-fA-F0-9]{40}$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 perpetual 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/wallet/{address}/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 up to 100 spot executions for a given wallet.
0x6c51275fd01d5dbd2da194e92f920f8598306df2Pattern: ^0x[a-fA-F0-9]{40}$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/wallet/{address}/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 historical order state updates for a wallet, newest first. Each row is one Order update for one of the wallet's accounts, across spot and perp markets.
History is limited and may be unavailable for high-volume accounts. This endpoint is for account-history views; it is not a complete audit log. Market makers should maintain their own order history from the orderChanges WebSocket stream and reconcile against current open orders after a disconnect.
startTime and endTime are millisecond Unix timestamps matched against lastUpdateAt. Results are newest-first: meta.startTime is the newest returned timestamp and meta.endTime is the oldest. endTime is inclusive, so passing the previous meta.endTime may repeat boundary rows; deduplicate using Order.sequenceNumber. Clients that do not need to preserve same-millisecond boundary ties may page backward with endTime = meta.endTime - 1.
0x6c51275fd01d5dbd2da194e92f920f8598306df2Pattern: ^0x[a-fA-F0-9]{40}$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.
1756733679000Paginated list of order state updates
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/wallet/{address}/orderHistory HTTP/1.1
Accept: */*
{
"data": [
{
"exchangeId": 1,
"symbol": "BTCRUSDPERP",
"accountId": 12345,
"orderId": "490346525705109504",
"sequenceNumber": 152954,
"clientOrderId": "123456789",
"qty": "1.0",
"execQty": "0.5",
"cumQty": "0.5",
"avgFillPx": "3450.25",
"firstFillId": "7205759403792794624",
"fillCount": 2,
"side": "B",
"limitPx": "43000.00",
"orderType": "TAKE_PROFIT",
"triggerPx": "50000.0",
"triggered": false,
"timeInForce": "GTC",
"expiresAfter": 1676923200,
"reduceOnly": false,
"postOnly": false,
"status": "OPEN",
"createdAt": 1747927089946,
"lastUpdateAt": 1747927089946,
"cancelReason": "NO_LIQUIDITY",
"cancelReasonMessage": "Order cancelled because it would have matched your own resting order",
"ANY_ADDITIONAL_PROPERTY": "anything"
}
],
"meta": {
"limit": 100,
"count": 50,
"endTime": 1756733579000,
"startTime": 1756733679000,
"ANY_ADDITIONAL_PROPERTY": "anything"
},
"ANY_ADDITIONAL_PROPERTY": "anything"
}0x6c51275fd01d5dbd2da194e92f920f8598306df2Pattern: ^0x[a-fA-F0-9]{40}$List of positions
1Trading symbol (e.g., BTCRUSDPERP, WETHRUSD)
BTCRUSDPERPPattern: ^[A-Za-z0-9]+$123451.5Pattern: ^\d+(\.\d+)?([eE][+-]?\d+)?$Order side (B = Buy/Bid, A = Ask/Sell)
43000.00Pattern: ^-?\d+(\.\d+)?([eE][+-]?\d+)?$Average of funding values at the entry times of currently open exposure, which serves as a baseline from which to compute the accrued funding in the position: units x (fundingValue - avgEntryFundingValue)
100.25Pattern: ^-?\d+(\.\d+)?([eE][+-]?\d+)?$Sequence number of last execution taken into account for the position.
152954Standardized 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/wallet/{address}/positions HTTP/1.1
Accept: */*
[
{
"exchangeId": 1,
"symbol": "BTCRUSDPERP",
"accountId": 12345,
"qty": "1.5",
"side": "B",
"avgEntryPrice": "43000.00",
"avgEntryFundingValue": "100.25",
"lastTradeSequenceNumber": 152954,
"ANY_ADDITIONAL_PROPERTY": "anything"
}
]Returns all account real balances for a wallet.
0x6c51275fd01d5dbd2da194e92f920f8598306df2Pattern: ^0x[a-fA-F0-9]{40}$List of account balances
12345WSTETHPattern: ^[A-Za-z0-9]+$Sum of account net deposits (transfers, deposits and withdrawals) and realized pnl from closed positions. Realized pnl only applies to RUSD given it is the only settlement asset
1.25Pattern: ^-?\d+(\.\d+)?([eE][+-]?\d+)?$Sum of account net deposits (transfers, deposits and withdrawals). This field is deprecated and will be removed in a future release
1.25Pattern: ^-?\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/wallet/{address}/accountBalances HTTP/1.1
Accept: */*
[
{
"accountId": 12345,
"asset": "WSTETH",
"realBalance": "1.25",
"balanceDEPRECATED": "1.25",
"ANY_ADDITIONAL_PROPERTY": "anything"
}
]Return settled collateral movements for every account of a wallet, newest first. The streaming walletTransfers channel delivers the same entries as live updates.
Coverage
Each entry belongs to one account and asset, with amount signed from that account's perspective. Moving 100 rUSD between two accounts of the same wallet produces two entries: -100 for the sending account and +100 for the receiving account.
This is a history of net deposits, not a complete balance or PnL history. Realized PnL, funding, and ADL cashflows are excluded; closing a profitable position shows its fee movements, not its profit. Use accountBalances.realBalance for realized balance and positions / perpExecutions for position and execution PnL.
Zero-amount entries are excluded. Historical coverage varies by environment; movements before the available history begins are absent. Returned entries do not change.
Transfer types
type describes the purpose of a movement, not its direction; use the sign of amount for direction. The following meanings apply to REST and WebSocket entries.
DEPOSIT / WITHDRAWAL
Collateral entering or leaving the protocol.
TRANSFER
Transfer between margin accounts of the same owner.
POOL_STAKE / POOL_UNSTAKE
Passive-pool staking or unstaking; entries cover the asset and share token.
PERP_TAKER_FEE
Gross fee paid by the taker on a perp fill.
PERP_REFERRER_REBATE
Rebate for the taker's referrer.
PERP_TAKER_REBATE
Rebate returned to the taker.
PERP_POOL_REBATE
Rebate credited to the passive pool.
PERP_FEE
Perp fee recorded in older execution history.
SPOT_EXECUTION
Token movements from a spot trade, recorded separately per asset.
AUTO_EXCHANGE / AUTO_EXCHANGE_INSURANCE_FEE
Auto-exchange movements and the associated insurance-fund fee.
LIQUIDATION_INSURANCE_FEE
Liquidation fee for the insurance fund.
LIQUIDATION_BACKSTOP_FEE
Liquidation fee for the backstop liquidity provider.
LIQUIDATION_LIQUIDATOR_REWARD / LIQUIDATION_KEEPER_REWARD
Liquidator or keeper reward.
LIQUIDATION_BID_FEE
Bid fee for a ranked liquidation.
INSURANCE_FUND_COVERAGE / POOL_MERGE
Insurance coverage or pool consolidation transfer.
OTHER
Unclassified movement; the reported amounts remain exact.
Pagination
Results are ordered newest first by
sequenceNumber.limitdefaults to 100 and is capped at 100 entries per page.Omit
cursorfor the first page. Pass the returnedmeta.nextCursorunchanged for the next page, keeping the same filters. Stop whennextCursoris absent.Cursor traversal visits each matching entry once, including when entries share a block timestamp. Use cursors rather than timestamps to advance between pages.
startTimeandendTimefilter the block timestamp in milliseconds.typefilters by a comma-separated list ofTransferTypevalues; omit it to include all types.
Reconciliation
For a complete history of one account and asset, process entries in chronological order: previous netDepositsAfter + amount = netDepositsAfter. Do not use a type-filtered or incomplete history to check that equality. netDepositsAfter is not the account's realBalance and should not be displayed as its complete balance.
Use sequenceNumber to merge and deduplicate REST history, the WebSocket snapshot, and live entries. Use fillId or spotExecutionSequenceNumber, when present, to associate movements with executions. Optional fields and historical availability are documented on Transfer; see walletTransfers for snapshot and live-frame delivery.
0x6c51275fd01d5dbd2da194e92f920f8598306df2Pattern: ^0x[a-fA-F0-9]{40}$Maximum number of entries per page. The default and the maximum are both 100; larger values are clamped to 100.
100Opaque page cursor from the previous response's meta.nextCursor. Omit for the
first page; otherwise pass it unchanged. Do not construct or parse cursor values.
djEuNTQ2MzY3NzA2LjAReturn 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.
1756733679000Page of transfer entries, newest first
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/wallet/{address}/transfers HTTP/1.1
Accept: */*
{
"data": [
{
"sequenceNumber": 273183852,
"accountId": 12345,
"asset": "RUSD",
"amount": "-0.50",
"netDepositsAfter": "1024.25",
"type": "DEPOSIT",
"counterpartyAccountId": 1,
"symbol": "BTCRUSDPERP",
"spotExecutionSequenceNumber": 9911,
"fillId": "42",
"timestamp": 1747927089946,
"transactionHash": "0x1dfdfed33589363842c4d8e5cfa1b3a9782ec07cb9a5ab5236ad1e1c224b64ea",
"ANY_ADDITIONAL_PROPERTY": "anything"
}
],
"meta": {
"limit": 100,
"count": 50,
"nextCursor": "djEuNTQ2MzY3NzA2LjA",
"ANY_ADDITIONAL_PROPERTY": "anything"
},
"ANY_ADDITIONAL_PROPERTY": "anything"
}Returns all pending orders for a wallet.
0x6c51275fd01d5dbd2da194e92f920f8598306df2Pattern: ^0x[a-fA-F0-9]{40}$List of open orders
Order state returned by openOrders, orderChanges, and orderHistory. Event streams and history can contain multiple updates for the same order. Field descriptions specify snapshot/event availability; see OrderStatus for lifecycle states.
1Trading symbol (e.g., BTCRUSDPERP, WETHRUSD)
BTCRUSDPERPPattern: ^[A-Za-z0-9]+$12345490346525705109504Monotonic order-event sequence. Present on orderHistory REST rows and orderChanges WS event rows; omitted on openOrders and other resting-order snapshots. Use it to deduplicate inclusive orderHistory page-boundary overlap and to splice orderHistory with the orderChanges live stream.
152954Client-provided order ID, as a decimal string (uint64). Present when the order has a non-zero client id; omitted otherwise.
1234567891.0Pattern: ^\d+(\.\d+)?([eE][+-]?\d+)?$Executed quantity in the current order update.
0.5Pattern: ^\d+(\.\d+)?([eE][+-]?\d+)?$Total Executed quantity across all fills where the order is involved.
0.5Pattern: ^\d+(\.\d+)?([eE][+-]?\d+)?$Quantity-weighted average execution price across all fills of the order so far (both maker and taker), excluding fees. Corresponds to cumQty, not execQty. Rounded half-up to at most 9 decimal places from exact cumulative executed notional. Preserved across amendments of the same order and cancellation. Exposed on create/modify responses, orderChanges, openOrders and orderHistory after the first fill; omitted when cumQty is zero.
3450.25Pattern: ^-?\d+(\.\d+)?([eE][+-]?\d+)?$Identifier of the first fill this update represents. Together with fillCount it identifies the fills as a contiguous ID range [firstFillId, firstFillId + fillCount - 1]. For a taker update, the first fill of its matching round; for a maker update, its single fill. Present only on fill updates; absent for non-fill updates and resting-order snapshots.
7205759403792794624Number of fills this update represents — the length of the contiguous nonce range starting at firstFillId. For a taker update, the fills produced in its matching round; for a maker update, 1. Present only on fill updates; absent otherwise (so it is >= 1 whenever present).
2Order side (B = Buy/Bid, A = Ask/Sell)
43000.00Pattern: ^-?\d+(\.\d+)?([eE][+-]?\d+)?$Order type aligned with the on-chain OrderDetails.orderType enum: LIMIT = limit order, STOP_LOSS = stop-loss trigger order, TAKE_PROFIT = take-profit trigger order.
TAKE_PROFITPossible values: Price at which TP/SL orders will be triggered, should not be set for other order types.
50000.0Pattern: ^-?\d+(\.\d+)?([eE][+-]?\d+)?$For protective stops, false means armed and true means fired; never true for LIMIT orders. Fired children are cancel-only. Omitted on orderHistory, where absence means unknown: use openOrders or walletOrderChanges to distinguish phases. On those two surfaces, omission on older deployments can be treated as false. See POST /v2/createOrder for firing and child-order behavior.
falseOrder time in force. For a LIMIT order it shapes execution directly. For a STOP_LOSS / TAKE_PROFIT it is the time in force the child order takes on when the trigger fires: IOC fills what the book offers and cancels the remainder, GTC and GTT rest the remainder in the book.
GTCPossible values: Unix seconds. Signed GTT expiry (OrderDetails.expiresAfter); omitted for GTC and IOC. For a protective stop, the same expiry covers both the armed stop and its fired child; firing does not start a new lifetime. The stop or its resting child can be cancelled before this timestamp to allow settlement, with cancelReason: GTT_EXPIRED.
1676923200Whether this is a reduce-only order, exclusively used for LIMIT IOC orders. STOP_LOSS / TAKE_PROFIT orders and the children they fire into are reduce-only by construction — they close the position and can never open one — yet still report false here, because this field mirrors the signed on-chain OrderDetails.reduceOnly. Do not read false on a stop as permission to open a position.
falseWhether this is a post-only (maker-only) order. Mirrors CreateOrderRequest.postOnly; updated by modifyOrder.
falseOPEN includes partially filled resting orders, armed protective stops, and their resting children. FILLED and CANCELLED are terminal states. Use Order.triggered to distinguish armed stops from fired children. Requests rejected before order creation return errors, not order-status rows.
Creation timestamp (milliseconds)
1747927089946Last update timestamp in milliseconds. For orderChanges WebSocket events and orderHistory REST rows this is the order event timestamp used by orderHistory startTime/endTime filters.
1747927089946Machine-readable reason the order was cancelled. Present only when status is CANCELLED; absent otherwise.
Human-readable explanation of cancelReason. Present only when cancelReason is present.
Order cancelled because it would have matched your own resting orderStandardized 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/wallet/{address}/openOrders HTTP/1.1
Accept: */*
[
{
"exchangeId": 1,
"symbol": "BTCRUSDPERP",
"accountId": 12345,
"orderId": "490346525705109504",
"sequenceNumber": 152954,
"clientOrderId": "123456789",
"qty": "1.0",
"execQty": "0.5",
"cumQty": "0.5",
"avgFillPx": "3450.25",
"firstFillId": "7205759403792794624",
"fillCount": 2,
"side": "B",
"limitPx": "43000.00",
"orderType": "TAKE_PROFIT",
"triggerPx": "50000.0",
"triggered": false,
"timeInForce": "GTC",
"expiresAfter": 1676923200,
"reduceOnly": false,
"postOnly": false,
"status": "OPEN",
"createdAt": 1747927089946,
"lastUpdateAt": 1747927089946,
"cancelReason": "NO_LIQUIDITY",
"cancelReasonMessage": "Order cancelled because it would have matched your own resting order",
"ANY_ADDITIONAL_PROPERTY": "anything"
}
]Returns trading configuration for a wallet
0x6c51275fd01d5dbd2da194e92f920f8598306df2Pattern: ^0x[a-fA-F0-9]{40}$Wallet configuration
Fee tier identifier
1OG status
trueAffiliate status
falseReferee status
falseStandardized 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/wallet/{address}/configuration HTTP/1.1
Accept: */*
{
"feeTierId": 1,
"ogStatus": true,
"affiliateStatus": false,
"refereeStatus": false,
"ANY_ADDITIONAL_PROPERTY": "anything"
}Last updated