orders.v1.OrdersService
CancelOrder
Cancels an existing order by id or client order id. REST clients submit base58 order IDs. ConnectRPC clients submit fixed64 order IDs. A cancel of an order that has already ended returns ERROR_CODE_ORDER_ALREADY_TERMINAL, including a cancel retried after a timeout once the order has ended: treat it as already done. A repeat while an earlier cancel of the order is still in progress is accepted again and changes nothing. A client order ID keeps naming its order for at least a minute after the order ends; a cancel by client order ID sent later may return ERROR_CODE_ORDER_UNKNOWN instead. Retry by order ID, or read the order, to tell an ended order from an unknown one.
Request
curl --request POST \ \
--url 'https://api.testnet.polyester.com/orders.v1.OrdersService/CancelOrder' \
--header 'Content-Type: application/json' \
--header 'Connect-Protocol-Version: 1' \
--data '{
"orderId": "9876543210123",
"subaccountId": "6789012345678",
"symbolId": 1
}'Responses
{
"orderId": "9876543210123",
"status": "ACCEPTED",
"ts": "2025-01-01T00:00:00Z",
"tsNs": "1735689600000000000"
}orders.v1.CancelOrderRequestorders.v1.CancelOrderResponseOrder ID as fixed64.
Client order ID.
Optional trading symbol numeric identifier. When set, it must match the order's symbol, or the order is reported unknown (ERROR_CODE_ORDER_UNKNOWN) and nothing is canceled. An order that ended a while ago may instead be reported ended (ERROR_CODE_ORDER_ALREADY_TERMINAL). When omitted, the order's own symbol is used.
Optional public subaccount ID. When omitted, subaccount-scoped API keys use their bound subaccount; other callers use their authenticated root account.
Cancellation submission outcome.
Order ID as fixed64.
Server timestamp.
Server timestamp as epoch nanoseconds (for bots).
| Key | HTTP status | Connect code | Error | When |
|---|---|---|---|---|
| account-orders-suspended | 400 | failed_precondition | Account Orders Suspended | New orders, changes and trigger orders on this account are suspended until a balance issue is resolved; cancels still work. Nothing changed. |
| account-repairing | 400 | failed_precondition | Account Repairing | This account's orders are being canceled while its balances are brought back in line, so new orders, changes and trigger orders are paused for a short time. Nothing changed; cancels still work. Try again shortly. |
| account-reservation-limit-reached | 429 | resource_exhausted | Account Reservation Limit Reached | The account has its maximum number of fund reservations. |
| account-routing-invalid | 503 | unavailable | Account Routing Invalid | The account cannot place triggers right now; contact support if it persists. |
| account-unknown | 400 | invalid_argument | Account Unknown | Account not found. |
| api-key-market-deny | 403 | permission_denied | API Key Market Deny | API key policy does not allow trading this pair. |
| api-key-policy-required | 403 | permission_denied | API Key Policy Required | This API key must have a policy attached before it can be used for trading. |
| api-key-root-scope-only | 403 | permission_denied | API Key Root Scope Only | This API key is scoped to the master account and cannot trade on sub-accounts. |
| api-key-subaccount-mismatch | 403 | permission_denied | API Key Subaccount Mismatch | This API key is scoped to a different sub-account than the one requested. |
| api-key-sub-scope-only | 403 | permission_denied | API Key Sub Scope Only | This API key is scoped to a specific sub-account and cannot trade on the master account. |
| api-key-unknown | 403 | permission_denied | API Key Unknown | API key referenced in the request could not be resolved by the Orders service. |
| attached-exit-working | 400 | failed_precondition | Attached Exit Working | An exit order placed by one of the order's attached take-profit or stop legs is still working; retry once it completes. |
| attached-legs-exceeded | 400 | invalid_argument | Attached Legs Exceeded | The order already carries every attached take-profit, stop-loss and trailing-stop leg it may hold, so the new leg was refused. Legs being cancelled count until they end; retry once they have ended. |
| attached-risk-not-supported | 501 | unimplemented | Attached Risk Not Supported | Attached take-profit, stop-loss or trailing legs can't be applied here: this market takes none, an attached trailing stop isn't offered yet, or the modify changes them together with the order's price, quantity, client order ID or a replace. Nothing changed. |
| bad-price | 400 | invalid_argument | Bad Price | Price is invalid. |
| bad-qty | 400 | invalid_argument | Bad Quantity | Quantity is invalid. |
| bad-request | 400 | invalid_argument | Bad Request | Invalid request payload. |
| batch-other-item-invalid | 400 | invalid_argument | Batch Other Item Invalid | Another item of the batch is invalid, so the batch was not applied. |
| batch-replace-only-required | 400 | invalid_argument | Batch Replace Only Required | Every item of a batch modify must use REPLACE_ONLY. |
| batch-single-symbol-required | 400 | invalid_argument | Batch Single Symbol Required | Every item of a batch modify must name the same symbol. |
| batch-too-large | 400 | invalid_argument | Batch Too Large | Batch size exceeds the maximum allowed for this operation. |
| cancel-all-after-scope-conflict | 400 | failed_precondition | Cancel-All-After Scope Conflict | A pending cancel-all-after can only be re-armed with a scope that covers it. |
| cancel-all-after-timeout-invalid | 400 | invalid_argument | Cancel-All-After Timeout Invalid | The cancel-all-after timeout must be 0 or between 10 and 120 seconds. |
| cancel-request-expired | 400 | failed_precondition | Cancel Request Expired | Cancel request expired before admission. Use a fresh request ID for a new cancellation. |
| cancel-scope-too-large | 400 | invalid_argument | Cancel Scope Too Large | A cancel-all request may name at most 100 symbols. |
| child-order-inconsistent | 400 | failed_precondition | Child Order Inconsistent | The trigger's child order did not match the order the trigger requested, so the trigger failed and the child order was canceled. |
| child-qty-exceeds-remaining | 400 | invalid_argument | Child Quantity Exceeds Remaining | The new quantity of a TWAP order's slice would leave more than the TWAP's remaining quantity. Nothing changed; a slice can be raised up to what the TWAP still has to execute. |
| child-qty-raise-not-allowed | 400 | invalid_argument | Child Quantity Raise Not Allowed | The quantity of a trigger's child order or a ladder order can't be raised above its planned quantity. Nothing changed. |
| client-order-ids-exhausted | 429 | resource_exhausted | Client Order IDs Exhausted | The account reserves its maximum number of client order IDs; retry later or send no client order ID. |
| client-order-id-capacity-reached | 429 | resource_exhausted | Client Order ID Capacity Reached | The venue cannot reserve a client order ID for another trigger right now; retry later. |
| client-trigger-id-invalid | 400 | invalid_argument | Client Trigger ID Invalid | The client trigger ID must be 1 to 36 bytes. |
| condition-flags-invalid | 400 | invalid_argument | Condition Flags Invalid | The trigger's condition sets an option its trigger type does not take. |
| condition-parameter-set | 400 | invalid_argument | Condition Parameter Set | The trigger's condition sets a parameter its trigger type does not use. |
| conflict-duplicate-client-order-id | 409 | already_exists | Conflict: Duplicate Client Order ID | Duplicate client order ID. |
| conflict-duplicate-client-trigger-id | 409 | already_exists | Conflict: Duplicate Client Trigger ID | Duplicate client trigger ID. |
| conflict-idempotency-key-reuse | 409 | already_exists | Conflict: Idempotency Key Reused | Idempotency key was already used with a different request payload. |
| dry-run-invalid | 400 | invalid_argument | Dry Run Invalid | The dry-run flag must be 0 or 1. |
| duplicate-order-id | 409 | already_exists | Duplicate Order ID | The order identifier is already in use by another order. |
| empty-book | 400 | invalid_argument | Empty Book | Market order cannot execute because the book is empty. |
| fee-asset-invalid | 400 | invalid_argument | Fee Asset Invalid | The trigger's fee asset is not a supported fee asset. |
| fee-asset-not-allowed | 400 | invalid_argument | Fee Source Not Allowed | Fee source not permitted for this pair/side. |
| fee-ceiling-invalid | 400 | invalid_argument | Fee Ceiling Invalid | The trigger's maximum fee rate is not valid. |
| fee-schedule-unavailable | 503 | unavailable | Fee Schedule Unavailable | The market's fees cannot be determined right now; retry later. |
| fok-insufficient-liquidity | 400 | invalid_argument | FOK Insufficient Liquidity | FOK order cannot be fully filled with available liquidity. |
| gateway-misconfigured | 500 | internal | Gateway Misconfigured | The trading gateway is misconfigured for its order service. Retrying does not help; contact support. |
| insufficient-funds | 400 | invalid_argument | Insufficient Funds | Insufficient funds. |
| intent-id-invalid | 400 | invalid_argument | Intent ID Invalid | The cancel-all intent identifier must not be zero. |
| internal-error | 500 | internal | Internal Error | Internal error. |
| invalid-argument | 400 | invalid_argument | Invalid Argument | Invalid argument. |
| invalid-client-order-id | 400 | invalid_argument | Invalid Client Order ID | The client order ID is not valid. |
| invalid-handling-mode | 400 | invalid_argument | Invalid Handling Mode | The order handling mode is not valid. |
| invalid-modify-behavior | 400 | invalid_argument | Invalid Modify Behavior | The modify behavior is not valid. |
| invalid-order-flags | 400 | invalid_argument | Invalid Order Flags | The order flags are not valid for this order. |
| invalid-order-id | 400 | invalid_argument | Invalid Order ID | The order identifier or the replacement order identifier is not valid. |
| invalid-order-type | 400 | invalid_argument | Invalid Order Type | The order type is not valid. |
| invalid-side | 400 | invalid_argument | Invalid Side | The order side is not valid. |
| invalid-stp-mode | 400 | invalid_argument | Invalid Self-Trade Prevention Mode | The self-trade prevention mode is not valid. |
| invalid-time-in-force | 400 | invalid_argument | Invalid Time In Force | The time in force, or its expiry, is not accepted for this order. |
| invalid-trigger-control | 400 | invalid_argument | Invalid Trigger Control | The trigger operation is not valid. |
| invalid-trigger-type | 400 | invalid_argument | Invalid Trigger Type | The trigger type is not valid. |
| ladder-levels-invalid | 400 | invalid_argument | Ladder Levels Invalid | A ladder places from 2 to 100 orders. |
| ladder-level-rejected | 400 | invalid_argument | Ladder Level Rejected | One of the ladder's orders can't be placed, so the ladder was not created. Nothing changed. |
| ladder-range-too-narrow | 400 | invalid_argument | Ladder Range Too Narrow | The ladder's price range is too narrow to place its orders at least one price tick apart. |
| limit-child-slippage-set | 400 | invalid_argument | Limit Child Slippage Set | A TWAP of LIMIT slices takes no slippage bound. |
| market-cap-violation | 400 | invalid_argument | Market Cap Violation | Order violates market-cap limits. |
| market-halted | 400 | invalid_argument | Market Halted | Market is halted. |
| market-ladder-limit-exceeded | 429 | resource_exhausted | Market Ladder Limit Exceeded | The account has its maximum number of ladder orders on this market; retry once one of them ends. |
| market-price-unavailable | 400 | failed_precondition | Market Price Unavailable | Cannot price this MARKET order because no reference price is available. |
| market-quote-stale | 400 | failed_precondition | Market Quote Stale | The market's reference quote is too old to price this market order; send a reference price or retry. |
| market-quote-unhealthy | 400 | failed_precondition | Market Quote Unhealthy | The market's reference quote cannot be used to price this market order; send a reference price or retry. |
| market-trigger-limit-exceeded | 429 | resource_exhausted | Market Trigger Limit Exceeded | The account has its maximum number of triggers on this market; retry once one of them ends. |
| market-twap-limit-exceeded | 429 | resource_exhausted | Market TWAP Limit Exceeded | The account has its maximum number of TWAP orders on this market; retry once one of them ends. |
| max-notional | 400 | invalid_argument | Max Notional | Order notional is above the maximum allowed for this pair. |
| max-open-orders-per-pair | 400 | invalid_argument | Max Open Orders Per Pair | The account has reached its maximum number of resting orders in this market; cancel one first, or send an immediate-or-cancel order. |
| max-open-orders-total | 400 | invalid_argument | Max Open Orders | The account has reached its maximum number of open orders. |
| max-qty | 400 | invalid_argument | Max Quantity | Order quantity is above the maximum allowed for this pair. |
| max-quote-debit-too-small | 400 | invalid_argument | Max Quote Debit Too Small | Max quote debit is too small to resolve one valid order step. |
| max-slippage-invalid | 400 | invalid_argument | Max Slippage Invalid | Maximum slippage is invalid. |
| min-notional | 400 | invalid_argument | Min Notional | Order notional is below the minimum allowed. |
| min-qty | 400 | invalid_argument | Min Quantity | Order quantity is below the minimum allowed. |
| modification-requires-replace | 400 | invalid_argument | Modification Requires Replace | Modify request in AMEND_ONLY mode requires replace semantics. |
| new-account-capacity-reached | 429 | resource_exhausted | New Account Capacity Reached | The venue cannot admit a new account to this market right now; retry later. |
| not-found | 404 | not_found | Not Found | Not found. |
| order-already-terminal | 400 | failed_precondition | Order Already Terminal | The order has already ended (filled, canceled or expired). |
| order-cancel-outcome-unknown | 504 | deadline_exceeded | Order Cancel Outcome Unknown | The order cancellation was not confirmed in time and may still apply; read the order to see whether it applied. For a batch, read back every item; for a cancel all, read open orders; for a cancel all after heartbeat, send it again. |
| order-create-outcome-unknown | 504 | deadline_exceeded | Order Create Outcome Unknown | The order was not confirmed in time and may have been accepted; read it by its client order ID, or read open orders, before retrying. For a batch, read back every item, or retry it with the same request ID and payload within 15 minutes; no item is admitted twice. |
| order-id-conflict | 409 | already_exists | Order ID Conflict | The order identifier is held by a different order. |
| order-limits-unavailable | 400 | failed_precondition | Order Limits Unavailable | This market's order limits aren't set yet, so it can't take new orders. |
| order-modify-in-progress | 503 | unavailable | Order Modify In Progress | An earlier modification of the order is still in progress; retry once it completes. |
| order-modify-outcome-unknown | 504 | deadline_exceeded | Order Modify Outcome Unknown | The order modification was not confirmed in time and may still apply; read the order to see whether it applied. For a batch, read back every item. |
| order-placement-pending | 503 | unavailable | Order Placement Pending | The order's placement has not completed yet; retry shortly. |
| order-repairing | 400 | failed_precondition | Order Repairing | This order is being canceled while the account's balances are brought back in line, so it can't be changed. Nothing changed; cancels still work, and the account's other orders can still be changed. |
| order-sequence-exhausted | 429 | resource_exhausted | Order Sequence Exhausted | The account cannot place more orders in this market; contact support. |
| order-type-not-allowed-in-auction | 400 | failed_precondition | Order Type Not Allowed In Auction | This market is in an auction call and takes only limit orders that rest without crossing the book; market, immediate-or-cancel and fill-or-kill orders are refused. Nothing changed. |
| order-unknown | 404 | not_found | Order Unknown | Order not found. |
| overloaded | 503 | resource_exhausted | Service Overloaded | Too many order requests are in flight for this account; retry after one completes. |
| pair-backlogged | 503 | unavailable | Pair Backlogged | The trading pair is busy with earlier orders; retry shortly. |
| pair-cancel-only | 400 | invalid_argument | Pair Cancel Only | Pair is in cancel-only mode; only cancellations are allowed. |
| pair-delisted | 400 | invalid_argument | Pair Delisted | Pair has been delisted. |
| pair-disabled | 400 | invalid_argument | Pair Disabled | Pair is temporarily disabled. |
| pair-not-listed-yet | 400 | invalid_argument | Pair Not Listed Yet | Pair is not listed yet. |
| pair-post-only | 400 | invalid_argument | Pair Post Only | Pair is in post-only mode; submit with post_only=true. |
| pair-reduce-only | 400 | invalid_argument | Pair Reduce Only | Pair is in reduce-only mode; new spot orders are not allowed. |
| permission-denied | 403 | permission_denied | Permission Denied | Permission denied. |
| policy-market-deny | 403 | permission_denied | Policy Market Deny | Sub-account policy does not allow trading this pair. |
| policy-max-notional | 400 | invalid_argument | Policy Max Notional | Order notional exceeds the maximum allowed for this sub-account. |
| policy-max-open-orders | 400 | invalid_argument | Policy Max Open Orders | Sub-account policy maximum number of open orders has been reached. |
| policy-spot-read-deny | 403 | permission_denied | Spot Read Denied | Effective policy does not allow reading spot data for this API key or sub-account. |
| policy-spot-trade-deny | 403 | permission_denied | Spot Trading Denied | Effective policy does not allow spot trading for this API key or sub-account. |
| policy-trading-halted | 403 | permission_denied | Trading Halted | Trading is halted for this sub-account. |
| policy-unavailable | 503 | unavailable | Policy Unavailable | The account's trading policy cannot be evaluated right now; retry later. |
| post-only-cross | 400 | invalid_argument | Post-Only Cross | Post-only order would cross the book. |
| post-only-limit-only | 400 | invalid_argument | Post-Only Limit Only | Post-only is only supported for LIMIT orders. |
| post-only-not-allowed-in-auction | 400 | failed_precondition | Post Only Not Allowed In Auction | This market is in an auction call; new post-only orders are refused. Nothing changed. |
| price-band-violation | 400 | invalid_argument | Price Band Violation | Order price violates price band limits. |
| price-levels-exhausted | 429 | resource_exhausted | Price Levels Exhausted | The market holds its maximum number of price levels; use a price that already has resting orders, or retry later. |
| price-level-quantity-limit | 400 | failed_precondition | Price Level Quantity Limit | The order would take the total quantity resting at its price past the most a price level can hold. Nothing changed: a new order was not placed, and a modified order keeps resting as it was. Use another price or a smaller quantity, or retry once less quantity rests at this price. |
| price-tick-size | 400 | invalid_argument | Price Tick Size | Price must align with the tick size. |
| qty-at-or-below-filled | 400 | failed_precondition | Quantity At Or Below Filled | The new quantity is at or below the filled quantity; the order ended at its filled quantity and no replacement was created. |
| qty-step-size | 400 | invalid_argument | Quantity Step Size | Quantity must align with the step size. |
| quickswap-account-owner-unknown | 503 | unavailable | QuickSwap Account Not Ready | The QuickSwap account is not ready yet; no order was placed. Retry shortly. |
| quickswap-attached-risk-not-allowed | 400 | invalid_argument | QuickSwap Attached Risk Not Allowed | QuickSwap orders can't carry take-profit or stop-loss legs. |
| quickswap-broker-account-unavailable | 503 | unavailable | QuickSwap Broker Account Unavailable | The broker's fee account isn't available yet; retry shortly. |
| quickswap-broker-fee-terms-invalid | 400 | failed_precondition | QuickSwap Broker Fee Terms Invalid | The broker fee terms are invalid and can't be used. |
| quickswap-broker-fee-terms-mismatch | 400 | invalid_argument | QuickSwap Broker Fee Terms Mismatch | The broker fee terms belong to another broker. |
| quickswap-broker-fee-terms-unavailable | 503 | unavailable | QuickSwap Broker Fee Terms Unavailable | The broker fee terms aren't available yet; retry shortly. |
| quickswap-broker-invalid | 400 | failed_precondition | QuickSwap Broker Invalid | The broker's QuickSwap setup is invalid and can't be used. |
| quickswap-capacity-reached | 429 | resource_exhausted | QuickSwap Capacity Reached | QuickSwap's capacity for fee settings is reached; this order can't be placed. |
| quickswap-disabled | 400 | failed_precondition | QuickSwap Disabled | QuickSwap isn't enabled for this account's trading. |
| quickswap-fee-details-incomplete | 400 | invalid_argument | QuickSwap Fee Details Incomplete | The request's QuickSwap fee details are incomplete: a fee schedule needs a broker, and a broker or broker fee terms need a fee schedule. |
| quickswap-fee-recipient-is-payer | 400 | invalid_argument | QuickSwap Fee Recipient Is Payer | A QuickSwap fee would be paid into the account placing the order. |
| quickswap-fee-schedule-invalid | 400 | failed_precondition | QuickSwap Fee Schedule Invalid | The QuickSwap fee schedule is invalid and can't be used. |
| quickswap-fee-total-too-high | 400 | failed_precondition | QuickSwap Fee Total Too High | The QuickSwap fees together would exceed the order's value. |
| quickswap-market-fee-invalid | 400 | failed_precondition | QuickSwap Market Fee Invalid | The QuickSwap fee for this market is invalid and can't be used. |
| quickswap-market-not-priced | 400 | failed_precondition | QuickSwap Market Not Priced | The requested QuickSwap fee schedule doesn't price this market. |
| quickswap-not-permitted | 403 | permission_denied | QuickSwap Not Permitted | QuickSwap is not available for this request. |
| quickswap-order-not-modifiable | 400 | failed_precondition | QuickSwap Order Not Modifiable | QuickSwap orders can't be amended or replaced. |
| quickswap-setup-invalid | 400 | failed_precondition | QuickSwap Setup Invalid | QuickSwap's setup is invalid, so QuickSwap orders can't be placed. |
| rate-limit-exceeded | 429 | resource_exhausted | Rate Limit Exceeded | Order-admission rate limit exceeded. |
| rate-limit-policy-unavailable | 503 | unavailable | Rate Limit Policy Unavailable | The account's rate limits cannot be evaluated right now; retry later. |
| reduce-only-blocked | 400 | invalid_argument | Reduce-Only Blocked | Order is blocked by reduce-only constraints. |
| replace-onto-own-id | 400 | invalid_argument | Replace Onto Own ID | A replacement order cannot reuse the order identifier it replaces. |
| request-receipts-exhausted | 429 | resource_exhausted | Request Receipts Exhausted | The account has too many recent modify or batch requests; retry shortly. |
| request-too-large | 413 | invalid_argument | Request Too Large | Request body too large. |
| reservation-capacity-reached | 429 | resource_exhausted | Reservation Capacity Reached | The venue cannot reserve funds for another trigger right now; retry later. |
| risk-limit | 400 | invalid_argument | Risk Limit Exceeded | Order would exceed account risk limits. |
| role-spot-trade-deny | 403 | permission_denied | Spot Trading Role Denied | Your role on this sub-account is read-only for spot trading. |
| self-trade-prevented | 400 | failed_precondition | Self-Trade Prevented | Self-trade prevention expired the attached take-profit, stop-loss or trailing stop order because it would have traded with another of the account's resting orders. The attached order stays active and fires again at a new trade at or beyond its trigger price, or once the other order is no longer at the best price. |
| settlement-backlogged | 503 | unavailable | Settlement Backlogged | The account has too many filled orders still settling. Nothing changed; retry once settlement catches up. |
| slippage-bounds-conflict | 400 | invalid_argument | Slippage Bounds Conflict | Give the slippage bound either in ticks or in basis points, not both. |
| slippage-bps-invalid | 400 | invalid_argument | Slippage Basis Points Invalid | The slippage bound in basis points is not valid. |
| slippage-ticks-invalid | 400 | invalid_argument | Slippage Ticks Invalid | The slippage bound in ticks is not valid. |
| stale-quote | 400 | failed_precondition | Stale Quote | Client reference price is stale relative to server market data. |
| stp-mode-not-allowed | 400 | invalid_argument | Self-Trade Prevention Mode Not Allowed | The self-trade prevention mode is not accepted. |
| subaccount-inactive | 400 | failed_precondition | Sub-account Inactive | Sub-account is inactive (disabled or deleted). |
| system-rate-limited | 429 | resource_exhausted | System Rate Limited | The venue's admission capacity is exhausted right now; retry shortly. |
| trailing-child-not-market | 400 | invalid_argument | Trailing Child Not Market | A trailing stop's child order must be a MARKET order. |
| trailing-distance-invalid | 400 | invalid_argument | Trailing Distance Invalid | Trailing stop distance is invalid. |
| trailing-side-not-supported | 400 | invalid_argument | Trailing Side Not Supported | A standalone trailing stop must sell; attached trailing stops take the side opposite their parent. |
| trailing-stop-order-type-unsupported | 400 | invalid_argument | Trailing Stop Order Type Unsupported | Trailing stop attached to an order only supports MARKET child orders in v1. |
| trigger-activation-price-invalid | 400 | invalid_argument | Trigger Activation Price Invalid | The trailing trigger's activation price is not valid. |
| trigger-buy-requires-limit | 400 | invalid_argument | Trigger Buy Requires Limit | A buy trigger's child order must be a LIMIT order. |
| trigger-capacity-reached | 429 | resource_exhausted | Trigger Capacity Reached | The venue holds its maximum number of triggers right now; retry later. |
| trigger-child-price-not-modifiable | 400 | invalid_argument | Trigger Child Price Not Modifiable | The trigger's child order price cannot be modified. |
| trigger-controls-busy | 503 | unavailable | Trigger Controls Busy | The venue is busy with other trigger changes; retry shortly. |
| trigger-control-in-progress | 503 | unavailable | Trigger Control In Progress | An earlier change of the trigger is still in progress; retry once it completes. |
| trigger-control-outcome-unknown | 504 | deadline_exceeded | Trigger Control Outcome Unknown | The trigger change was not confirmed in time; read the trigger to see whether it applied. |
| trigger-control-share-exhausted | 429 | resource_exhausted | Trigger Control Share Exhausted | The account has too many unanswered trigger changes; retry shortly. |
| trigger-create-outcome-unknown | 504 | deadline_exceeded | Trigger Create Outcome Unknown | The trigger was not confirmed in time and may have been created; read the triggers for its client trigger ID before retrying. |
| trigger-direction-invalid | 400 | invalid_argument | Trigger Direction Invalid | The trigger direction must be ABOVE or BELOW. |
| trigger-fire-limit-reached | 429 | resource_exhausted | Trigger Fire Limit Reached | The trigger could not fire again on this market. Create a new trigger. |
| trigger-generations-exhausted | 400 | failed_precondition | Trigger Generations Exhausted | The trigger cannot be changed again; cancel it and create a new one. |
| trigger-limit-exceeded | 429 | resource_exhausted | Trigger Limit Exceeded | The account has its maximum number of triggers. |
| trigger-not-found | 404 | not_found | Trigger Not Found | Trigger not found. |
| trigger-not-modifiable | 400 | invalid_argument | Trigger Not Modifiable | Trigger does not support this lifecycle operation. |
| trigger-patch-empty | 400 | invalid_argument | Trigger Patch Empty | The trigger modification changes nothing. |
| trigger-patch-field-unknown | 400 | invalid_argument | Trigger Patch Field Unknown | The trigger modification names an unknown field. |
| trigger-patch-not-allowed | 400 | invalid_argument | Trigger Patch Not Allowed | Only a trigger modification may carry changes. |
| trigger-patch-price-mode-invalid | 400 | invalid_argument | Trigger Patch Price Mode Invalid | The trigger modification's price mode is not valid. |
| trigger-patch-value-unmasked | 400 | invalid_argument | Trigger Patch Value Unmasked | The trigger modification sets a value for a field it does not name. |
| trigger-price-invalid | 400 | invalid_argument | Trigger Price Invalid | Trigger price is invalid. |
| trigger-price-source-unsupported | 400 | invalid_argument | Trigger Price Source Unsupported | Trigger price source not supported. |
| trigger-qty-invalid | 400 | invalid_argument | Trigger Quantity Invalid | The trigger's child order quantity must be positive. |
| trigger-status-invalid | 400 | invalid_argument | Trigger Status Invalid | Trigger cannot perform this action in its current status. |
| trigger-symbol-mismatch | 400 | invalid_argument | Trigger Symbol Mismatch | The request names a different listed trading pair from the trigger's own. Nothing changed; name the trigger's own pair, or omit the symbol. |
| trigger-type-not-supported | 400 | invalid_argument | Trigger Type Not Supported | This trigger type is not supported yet. |
| trigger-would-trigger-immediately | 400 | failed_precondition | Trigger Would Trigger Immediately | The trigger price is already reached by the price the trigger watches, so the trigger would fire at once. Nothing changed; choose a trigger price the market has not reached. |
| twap-capacity-reached | 429 | resource_exhausted | TWAP Capacity Reached | The market has no room for another TWAP order right now. Retry later. |
| twap-duration-invalid | 400 | invalid_argument | TWAP Duration Invalid | The TWAP duration must be at least 1 second and at most about 292 years. |
| twap-interval-invalid | 400 | invalid_argument | TWAP Interval Invalid | The TWAP slice interval must be at least 100 milliseconds and no longer than its duration. |
| unauthenticated | 401 | unauthenticated | Unauthenticated | Authentication required. |
| unavailable | 503 | unavailable | Service Unavailable | Service temporarily unavailable. |
| unknown-symbol | 400 | invalid_argument | Unknown Symbol | Unknown symbol. |
| unsupported-field-set | 400 | invalid_argument | Unsupported Field Set | The trigger set a field that must be left unset. |
| upstream-error | 502 | unavailable | Upstream Error | Upstream error. |
| validation-error | 400 | invalid_argument | Validation Error | Request validation failed. |