ACCESS_FORBIDDEN | 403 | This credential cannot perform this action. | Use a credential with the required permission. | No |
ACCOUNT_KEY_AUTHORITY_REQUIRED | 403 | The request needs a current API key owned by the account with the required permission. | Use a current account-owned key that holds the permission, or ask an admin to grant it. | No |
ACCOUNT_NOT_AVAILABLE | 403 | The venue account the quote names is not available to this credential. | Requote without that account, or use a credential that can trade on it. | No |
ACCOUNT_READING_PAUSED | 409 | Reading this account is paused. | Resume account reads in its Controls before reading instructions. | No |
ADDRESS_SCREEN_UNAVAILABLE | 503 | The sanctions address screen for the sending chain could not answer; nothing was admitted. | Retry the same request shortly, with backoff. | Yes |
ADVANCED_ACCOUNT_ELIGIBILITY_UNAVAILABLE | 409 | Whether the route’s venue account allows Advanced trading could not be read; nothing was placed. | Request a new quote, then place the order on it. | No |
ADVANCED_MODE_DISABLED | 403 | This platform has not enabled Advanced trading; nothing was placed. | Use a Basic quote, or wait until Advanced trading is enabled. | No |
ADVANCED_SOURCE_ACCOUNT_UNAVAILABLE | 409 | The selected trading source’s accounts could not be read, or the selected financial account does not resolve to one wallet; no venue was asked. | Retry shortly; if it persists, choose another trading source. | Yes |
ADVANCED_VENUE_ACCOUNT_REQUIRED | 409 | This route needs an Advanced venue account that the workspace does not have; nothing was placed. | Set up the venue account for Advanced trading, then request a new quote. | No |
AGENT_VENUE_TRADING_NOT_ELIGIBLE | 403 | An agent service account cannot trade venues: venue quotes, desk prices, venue routes and organisation-wallet orders refuse its key. | Trade through a human-operated service account’s venue-trading key, or as a member. | No |
AGGREGATION_ERROR | 400 | No venue could price the request. | Change the pair, amount or filters, then request quotes again. | No |
AGGREGATION_TIMEOUT | 504 | No venue returned a valid quote before the deadline. | Retry the same request shortly, with backoff. | Yes |
ALL_SOLVERS_FAILED | 400 | Every venue asked refused or failed to price the request. | Change the pair, amount or filters, then request quotes again. | No |
API_KEY_ORGANISATION_WALLET_AUTHORITY_UNAVAILABLE | 503 | The API key’s organisation-wallet grants or signing state could not be read, so the answer was refused rather than shown empty (GET /api/v1/me). | Retry the same request shortly, with backoff. | Yes |
API_KEY_ORGANISATION_WALLET_KEY_NOT_ELIGIBLE | 409 | Only a member’s own API key or a service-account key trades organisation wallets; a legacy workspace key, or another member’s key, is refused. Nothing was sent. | Use your own member key or a human-operated service account’s venue-trading key. | No |
API_KEY_ORGANISATION_WALLET_NOT_ALLOWLISTED | 403 | The organisation wallet the request names is not in this API key’s grant. | Ask a workspace Owner or ManageCredentials holder to add the wallet to the key’s grant, or name a wallet the key holds. | No |
API_KEY_ORGANISATION_WALLET_SCOPE_REQUIRED | 409 | The API key was not granted the organisation wallet the venue would use. A quote source answers unavailable with it; an order or requote on that source is refused. | Grant the key that wallet, or bind a wallet it holds. | No |
API_KEY_UNAVAILABLE | 503 | The request’s API key could not be identified or confirmed as current. | Retry shortly; if it persists, check the key is still active. | Yes |
ASSETS_WORKSPACE_TYPE | 403 | This workspace type cannot read taker assets. | Use a Company, Broker or Direct-user workspace, or finish taker onboarding for this workspace. | No |
ASSET_CATALOGUE_UNAVAILABLE | 503 | The asset catalogue is not loaded just now. | Retry the same request shortly, with backoff. | Yes |
ASSET_CATALOG_UNAVAILABLE | 503 | The asset catalogue could not be read to check the deposit network. | Retry the same request shortly, with backoff. | Yes |
ASSET_HAS_NO_CHAIN_DEPOSIT | 400 | The selected asset has no on-chain deposit. | Use bank-deposit instructions for this currency, or select an asset with an on-chain token. | No |
ASSET_NOT_ON_CHAIN | 400 | The asset has no deployment on the chain pinned for that side. | Pin a chain the asset is on (see GET /assets), or remove the pin. | No |
AUTHORIZATION_UNAVAILABLE | 503 | Current workspace access could not be verified. | Retry the same request shortly, with backoff. | Yes |
AUTH_NOT_CONFIGURED | 500 | Authentication is enabled but the token service is not configured on this server. | Contact TetraFi support with the requestId; do not retry in a loop. | No |
AUTH_REQUIRED | 401 | This operation needs an authenticated caller. | Send an API key (X-API-Key) or a bearer token. | No |
AUTO_WITHDRAW_ROUTE_UNAVAILABLE | 422 | Automatic withdrawal has no route for this order. | Turn off automatic withdrawal for this order, or choose another settlement wallet. | No |
AUTO_WITHDRAW_WALLET_REQUIRED | 400 | Automatic withdrawal needs a settlement wallet. | Select a settlement wallet, then place the order again. | No |
BANK_ACCOUNTS_UNAVAILABLE | 503 | The workspace’s bank accounts could not be read. | Retry the same request shortly, with backoff. | Yes |
BANK_ACCOUNT_KEY_UNAVAILABLE | 503 | The bank-account credential needed for receiving instructions is unavailable. | Retry the same request shortly, with backoff. | Yes |
BANK_DESTINATION_NOT_SCREENED | 403 | The payout’s bank destination has not been screened. | Screen the bank destination, then place the order again. | No |
BANK_DESTINATION_SCREEN_UNAVAILABLE | 503 | The bank destination’s screening could not be read; nothing was admitted. | Retry the same request shortly, with backoff. | Yes |
BASE_PROFILE_INCOMPLETE | 403 | The company’s base profile (legal name, country of incorporation, registration number, registered address) is incomplete, so an order it originates on a venue’s own rails cannot be checked; details.capabilityBlockers names the missing fields in currentlyDue. Nothing was admitted or sent. | Complete the company details in the TetraFi app under Entity profile, then place the order again. | No |
BUDGET_EXHAUSTED | 429 | This venue’s quote budget is used up for now. | Wait for the Retry-After period, then requote. | Yes |
CAPABILITIES_UNAVAILABLE | 503 | The workspace’s verification could not be read, or changed during the read; no capability snapshot was released. | Retry the same request shortly, with backoff. | Yes |
CAPABILITY_BLOCKED | 403 | The workspace cannot use this capability; each entry in details.capabilityBlockers names the state in its code (BASE_PROFILE_INCOMPLETE: company details missing, with the missing fields in currentlyDue; KYC_NOT_VERIFIED: a direct user’s identity verification missing), the step that clears it in unlockStep, and where in its message. | Clear each blocker in details.capabilityBlockers: company details (legal name, country of incorporation, registration number, registered address) and a direct user’s identity verification (KYC) are completed in the TetraFi app, not through the API; the request then succeeds unchanged. | No |
CAPABILITY_UNAVAILABLE | 503 | Whether the workspace can use this capability could not be read (for example BASE_PROFILE_UNREADABLE: its company details could not be read). | Retry the same request shortly, with backoff. | Yes |
CHAIN_MISSING | 400 | The quote payload is missing its execution chain. | Request a new quote, then place the order on it. | No |
CHAIN_PIN_NEEDS_ON_CHAIN | 400 | A chain was pinned on a side that is not an on-chain asset. | Remove the chain pin, or name an on-chain asset. | No |
COMPANY_IDENTITY_CHANGED | 409 | The company’s compliance identity changed after the order was prepared. | Review the order again and place a fresh one. | No |
COMPANY_IDENTITY_UNAVAILABLE | 503 | The company’s compliance identity could not be read. | Retry the same request shortly, with backoff. | Yes |
COMPLIANCE_ATTESTATION_NOT_CONFIGURED | 503 | On-chain compliance attestation is not configured for this route. | Choose another quote; this route cannot be traded until it is configured. | No |
COMPLIANCE_CREDENTIAL_UNAVAILABLE | 503 | The compliance credential could not be published on-chain just now. | Retry the same request shortly, with backoff. | Yes |
COMPLIANCE_DATA_REQUIRED | 400 | The workspace’s compliance policy needs per-trade data this order did not include; details lists the missing fields. | Add the missing fields named in details, then place the order again. | No |
COMPLIANCE_FAILED | 403 | The order did not pass compliance checks. | Do not retry. Contact your compliance team or TetraFi support with the requestId. | No |
COMPLIANCE_IDENTITY_MISMATCH | 400 | The signed trade authorization names a compliance identity that is not the signing wallet’s. | Sign the authorization again with the wallet the quote was made for. | No |
COMPLIANCE_MIRROR_PROPAGATING | 503 | Compliance status is still propagating to a chain; the update has been re-sent. | Retry the same request shortly, with backoff. | Yes |
COMPLIANCE_POLICY_PREFLIGHT_UNAVAILABLE | 503 | The settlement compliance policy could not be checked. | Retry the same request shortly, with backoff. | Yes |
COMPLIANCE_POLICY_REJECTED | 403 | The order was refused by the settlement compliance policy. | Contact your compliance team with the requestId. | No |
COMPLIANCE_READINESS_UNAVAILABLE | 503 | The wallet’s compliance identity could not be prepared just now. | Retry the same request shortly, with backoff. | Yes |
COMPLIANCE_SERVICE_NOT_CONFIGURED | 503 | The compliance attestation service is not configured for this route. | Choose another quote; this route cannot be traded until it is configured. | No |
COMPLIANCE_SETTLEMENT_UNAVAILABLE | 503 | Compliant settlement contracts are not configured for this request. | Choose another quote or route. | No |
COMPLIANCE_SNAPSHOT_UNAVAILABLE | 503 | The current compliance snapshot could not be read; nothing was admitted or sent. | Retry the same request shortly, with backoff. | Yes |
COMPLIANCE_SUBJECTS_UNAVAILABLE | 503 | The parties to screen for this order could not be read. | Retry the same request shortly, with backoff. | Yes |
COMPLIANCE_TARGET_NOT_ATTACHED | 503 | The settlement contract is not attached to the compliance service. | Choose another quote. | No |
COMPLIANCE_TARGET_UNBOUND | 503 | The settlement contract has no compliance policy. | Choose another quote. | No |
CONTINUATION_ACCEPTANCE_NOT_OFFERED | 409 | The signed acceptance does not answer the continuation’s current offer. | Prepare the continuation again for a fresh offer, then sign that offer. | No |
CONTINUATION_ACCEPTED_BY_RETIRED_TRADER | 409 | The continuation’s trade was accepted before the client signed as trader; it is held for recovery. | Contact TetraFi support with the requestId; do not retry in a loop. | No |
CONTINUATION_ASSET_MISMATCH | 409 | A trade that finishes an order must spend the asset that order left, on the same network. | Spend the asset and network the parent order left. | No |
CONTINUATION_EXPIRED | 409 | The prepared continuation step has expired. | Prepare the continuation again (POST the continuation path), then sign it. | No |
CONTINUATION_FUNDER_MISMATCH | 409 | The continuation was signed or funded by a wallet other than the route’s taker. | Sign the continuation with the wallet that placed the order. | No |
CONTINUATION_FUNDING_PENDING | 409 | Funding for this continuation was submitted or is awaiting confirmation. | Read the order’s status; do not start a replacement trade. | Yes |
CONTINUATION_IN_PROGRESS | 409 | Preparation or funding of this continuation is already in progress. | Read the order’s status, then retry preparation to resume the same trade. | Yes |
CONTINUATION_NOT_ARRIVED | 409 | The funds the continuation needs have not arrived yet. | Wait, then read the continuation again before signing. | Yes |
CONTINUATION_NOT_CLAIMED | 409 | The continuation has no claimed signature to relay. | Prepare the continuation and sign it before submitting. | No |
CONTINUATION_NOT_PREPARED | 409 | No continuation step is prepared for this order. | POST to the continuation path to prepare it, then sign the result. | No |
CONTINUATION_ORDER_ID_INVALID | 409 | The executing venue returned an order identifier the continuation cannot use. | Contact TetraFi support with the requestId; do not retry in a loop. | No |
CONTINUATION_PARENT_NOT_FINISHABLE | 409 | The named order has no funds waiting to be finished in a new trade. | Name the order whose funds are waiting, or place a new order. | No |
CONTINUATION_PREPARED_BY_RETIRED_TRADER | 409 | This continuation was prepared before the client signed as trader. | Let it lapse, then prepare it again. | No |
CONTINUATION_REQUIRES_WORKSPACE | 400 | An order that finishes an earlier order must be placed in that order’s workspace. | Send the request in the original order’s workspace. | No |
CONTINUATION_REVISION_REFUSED | 409 | The continuation cannot be revised in its current state. | Read the order’s nextAction, then prepare again. | No |
CONTINUATION_STATE_CHANGED | 409 | The continuation’s state changed while the request ran. | Read the order’s nextAction before retrying. | Yes |
CONTINUATION_TRADE_NOT_FUNDABLE | 409 | The venue closed this trade before it was funded; nothing moved. | Prepare the continuation again for a fresh trade. | No |
CONTINUATION_WALLET_MISMATCH | 409 | A trade that finishes an order must spend from the wallet that holds its funds. | Spend from the wallet the parent order left its funds in. | No |
CONVERSION_IDENTITY_MISMATCH | 409 | The venue trade already belongs to another operation; nothing was sent. | Read the existing operation, or request a new quote for a new trade. | No |
CONVERSION_IDENTITY_UNAVAILABLE | 503 | The trade’s identity could not be recorded; nothing was sent. | Retry the same request shortly, with backoff. | Yes |
CONVERSION_PAIR_MISMATCH | 409 | The trade’s pair does not match the approved conversion; nothing was sent. | Request a new quote, then place the order on it. | No |
CORRIDOR_NOT_OFFERED | 400 | This quote was not offered on the corridor the request names. | Requote on a corridor the quote lists, or request new quotes. | No |
CORRIDOR_NOT_SUPPORTED | 422 | No settlement path is live on both ends of this chain pair. | Choose a different chain pair or quote. | No |
COUNTERPARTY_ROUTER_UNAVAILABLE | 422 | The counterparty’s settlement contract is not available on this chain pair. | Choose another quote. | No |
COUNTERPARTY_STANDING_UNAVAILABLE | 503 | The counterparty’s compliance standing could not be recorded or confirmed just now; nothing changed. | Retry the same request shortly, with backoff. | Yes |
CREDENTIAL_RESEAL_REQUIRED | 503 | The stored venue credential needs to be sealed with the current key. | Rotate or re-verify the account’s credential before reading instructions. | No |
CREDIT_LIMIT_BREACH | 409 | The order needs more credit than the venue account has left under its credit limit; nothing was sent. details.creditRefusal.fix says what passes: reduceAmount {maxAmount, asset} when a smaller order fits, reduceExposure {overBy, currency} when the account is already over its limit and only a trade that reduces what it owes is admitted. | Lower the amount to fix.maxAmount, or under reduceExposure place only a trade that reduces what the account owes, then request a new quote. | No |
CREDIT_READ_UNAVAILABLE | 503 | The venue account’s credit could not be read fresh enough to check this order; nothing was sent. | Retry the same request shortly, with backoff. | Yes |
CSV_EXPORT_RATE_LIMIT | 429 | Too many CSV exports from this workspace in the current window. | Wait for the Retry-After period, then export again. | Yes |
CURSOR_STALE | 409 | The list changed since this cursor was issued. | Start the listing again without a cursor. | No |
CUSTODY_WALLET_BROWSER_ONLY | 400 | The selected wallet signs in the browser, so it cannot be used for server-side signing. | Send the wallet’s own signature instead, or choose a custody wallet. | No |
CUSTODY_WALLET_NOT_FOUND | 400 | The custody wallet is not registered in this workspace. | Choose a custody wallet registered in this workspace. | No |
CUSTODY_WALLET_WRONG_WORKSPACE | 403 | The custody wallet belongs to another workspace. | Choose a custody wallet of this workspace. | No |
DEFERRED_ACCOUNTING_NOT_CONFIGURED | 503 | Deferred accounting is not configured for this route. | Choose another quote; this route cannot be traded until it is configured. | No |
DEFERRED_REHYDRATION_UNAVAILABLE | 503 | The deferred order’s prepared state could not be read. | Retry the same request shortly, with backoff. | Yes |
DEFERRED_SETTLEMENT_ERROR | 400 | The deferred settlement refused the order. | Correct the order as the message says, or request a new quote. | No |
DEFERRED_TRADE_INTENT_REQUIRED | 400 | A deferred order must include the signed trade intent returned with the quote. | Send the trade intent from the quote with the wallet’s signature. | No |
DELEGATED_EXECUTION_REQUIRES_WORKSPACE | 400 | Server-side execution of the source needs a workspace context. | Send the request with the workspace’s credential. | No |
DELEGATED_EXECUTION_UNAVAILABLE | 409 | Server-side execution is not available for this order. | Sign and send the source transaction yourself, or choose another quote. | No |
DELEGATED_SOURCE_ALREADY_SUBMITTED | 409 | This order’s source transaction was already submitted. | Read the order’s state instead of submitting again. | No |
DELEGATED_SOURCE_AUTHORIZATION_REQUIRED | 400 | Server-side execution needs the wallet owner’s authorization. | Include the owner authorization the order preparation asked for. | No |
DELEGATED_SOURCE_AUTHORIZATION_UNUSABLE | 409 | The retained owner authorization can no longer be used. | Prepare the order again and authorize it again. | No |
DELEGATED_SOURCE_CUSTODY_UNSUPPORTED | 501 | Server-side execution does not support this wallet’s custody provider. | Use a supported wallet, or sign the source transaction yourself. | No |
DELEGATED_SOURCE_DEADLINE_EXPIRED | 400 | The source authorization’s deadline has passed. | Prepare and authorize the order again. | No |
DELEGATED_SOURCE_DEADLINE_TOO_CLOSE | 409 | The source authorization expires too soon to be executed safely. | Authorize again with a later deadline. | No |
DELEGATED_SOURCE_DEADLINE_TOO_FAR | 400 | The source authorization’s deadline is further away than allowed. | Authorize again with a nearer deadline. | No |
DELEGATED_SOURCE_EMBEDDED_WALLET_FAILED | 502 | The wallet provider failed to execute the source transaction. | Retry the same request shortly, with backoff. | Yes |
DELEGATED_SOURCE_INSUFFICIENT_GAS | 503 | The executor does not have enough gas to send the source transaction now. | Retry the same request shortly, with backoff. | Yes |
DELEGATED_SOURCE_OWNER_CHANGED | 409 | The source transaction does not belong to the wallet that was screened. | Register the source transaction from the screened wallet, or prepare a new order. | No |
DELEGATED_SOURCE_PLAN_MALFORMED | 400 | The submitted source plan does not match what the order prepared. | Send the source plan exactly as the preparation returned it. | No |
DELEGATED_SOURCE_QUEUE_TIMEOUT | 503 | The source transaction could not be queued in time. | Retry the same request shortly, with backoff. | Yes |
DELEGATED_SOURCE_REPLACEMENT_REQUIRED | 409 | The earlier source attempt must be replaced before sending again. | Prepare the order again to get a replacement, then sign it. | No |
DELEGATED_SOURCE_SIGNATURE_INVALID | 400 | The source authorization’s signature does not verify. | Sign the source authorization again with the funding wallet. | No |
DELEGATED_SOURCE_SIGNATURE_REQUIRED | 400 | The source authorization needs a signature. | Include the funding wallet’s signature. | No |
DELEGATED_SOURCE_STATE_UNAVAILABLE | 503 | The order’s source submission record could not be read or written; nothing was sent. | Retry the same request shortly, with backoff. | Yes |
DELEGATED_SOURCE_UNAVAILABLE | 409 | Server-side source execution is not available for this order now. | Sign and send the source transaction yourself, or choose another quote. | No |
DELEGATED_SOURCE_UNSUPPORTED | 400 | This source cannot be executed server-side. | Sign and send the source transaction yourself. | No |
DELIVER_TO_AMBIGUOUS | 409 | The deliverTo address matches more than one withdrawal destination. A quote source answers unavailable with it; an order or requote on that source is refused. | Name the destination exactly, including its tag or memo. | No |
DELIVER_TO_CHAIN_MISMATCH | 400 | The delivery address is not on the trade’s receive chain. | Set deliverTo.chain to the receive chain named in details.receiveChain, or choose a different receive chain. | No |
DELIVER_TO_NOT_A_WORKSPACE_WALLET | 409 | deliverTo is not one of the workspace’s own wallets. A quote source answers unavailable with it; an order or requote on that source is refused. | Deliver to a workspace wallet. | No |
DEPOSIT_SCREENING_PENDING | 503 | Screening of the sending address is still running. | Retry the same request shortly, with backoff. | Yes |
DEPOSIT_SCREENING_UNSUPPORTED_CHAIN | 403 | Wallet screening does not cover the sending chain, so the order is refused. | Send from a chain that screening covers. | No |
DESTINATION_NOT_APPROVED | 409 | deliverTo is not an approved withdrawal destination of the venue account. A quote source answers unavailable with it; an order or requote on that source is refused. | Approve the destination on the venue account, or deliver elsewhere. | No |
DIRECT_DEX_EVIDENCE_UNAVAILABLE | 503 | The swap route’s preflight record could not be read. | Retry the same request shortly, with backoff. | Yes |
DIRECT_DEX_PREFLIGHT_REQUIRED | 400 | This swap route needs a matching preflight before the order. | Call POST /orders/preflight for this quote, then place the order. | No |
DIRECT_DEX_ROUTE_INVALID | 400 | The swap route does not match the expected shape. | Request a new quote, then place the order on it. | No |
DIRECT_USER_MISMATCH | 403 | The order names a different direct user than its quote. | Send the directUserId the quote was made for. | No |
DUPLICATE_ORDER | 409 | An order is already registered for this quote. | Read the existing order; do not place it again. | No |
EDD_REQUIRED | 403 | Enhanced due-diligence data is required; details lists the missing fields. | Provide the missing fields named in details, then place the order again. | No |
EIP712_HASH_FAILED | 400 | The order’s typed-data payload could not be hashed. | Request a new quote, then place the order on it. | No |
EMAIL_VERIFICATION_REQUIRED | 403 | The signed-in person has not verified their email. | Verify the email address, then retry. | No |
EXACT_ROUTE_UNAVAILABLE | 422 | No executable route exists for this exact pair right now. | Change the pair or amount, or try again later. | No |
EXECUTION_STAGE_DISABLED | 409 | Trading on this venue is switched off in this environment; nothing was sent. | Choose another venue’s quote. | No |
EXECUTION_STOPPED | 409 | Execution is stopped for this venue or route; nothing was placed or sent. | Choose another quote; retry later if the venue resumes. | No |
EXECUTION_UNAVAILABLE | 409 | The route’s execution path is not available, so no plan could be sealed. | Choose another quote. | No |
EXPORT_TOO_LARGE | 400 | The export would hold more rows than one file allows. | Narrow the filters or the date range, then export again. | No |
FIAT_ARRIVAL_UNAVAILABLE | 503 | The bank deposit’s expected arrival could not be established. | Retry the same request shortly, with backoff. | Yes |
FIAT_BALANCE_INSUFFICIENT | 409 | The venue account’s balance does not cover this bank trade; nothing was placed. | Add funds or lower the amount, then request a new quote. | No |
FIAT_BALANCE_UNAVAILABLE | 409 | The venue account’s balance could not be read; nothing was placed. | Retry the same request shortly, with backoff. | Yes |
FIAT_BANK_ACCOUNT_UNBOUND | 409 | The bank quote names no bank account bound to this workspace. | Bind a bank account for this venue account, then request a new quote. | No |
FIAT_CARD_ACCOUNT_UNREADABLE | 409 | The bank quote’s venue account could not be read. | Request a new quote, then place the order on it. | No |
FIAT_CARD_NOT_A_BANK_CARD | 409 | The quote is not a bank quote, so bank terms do not apply. | Remove the bank terms from the order. | No |
FIAT_DEPOSIT_FIRST_NEEDS_MEMBER | 403 | Deposit-first trades need a signed-in member to confirm; an API key cannot consent. | Have a member confirm the trade in TetraFi. | No |
FIAT_DEPOSIT_FIRST_UNAVAILABLE | 422 | Deposit first is not available for this trade. | Pay from the venue account balance instead. | No |
FIAT_FUNDING_MISMATCH | 409 | The funding chosen does not match how the venue funds this bank trade. | Remove the funding choice, or match the venue’s funding model. | No |
FIAT_FUNDING_MODEL_UNSUPPORTED | 422 | The venue’s funding model for this trade is not supported yet; nothing was placed. | Choose another quote. | No |
FIAT_PAYOUT_FEE_UNVERIFIED | 409 | The bank payout fee could not be verified. | Request a new quote, then place the order on it. | No |
FIRM_ORDER_REQUIRED | 409 | The firm order must exist before its signature is submitted. | Place the order first, then submit the signature. | No |
FORBIDDEN | 403 | The caller may not read this record. | Use a credential whose role covers the record. | No |
FUNDER_PERMIT_NOT_APPLICABLE | 400 | This continuation is signed as a route trade intent, not a funder permit. | Send routeTradeIntent and routeTradeIntentSignature instead. | No |
FUNDER_PERMIT_REQUIRED | 400 | This continuation needs funderSignature and funderPermit2. | Include funderSignature and funderPermit2. | No |
FUNDING_AUTHORIZATION_TOO_LARGE | 400 | funderPermit2 is larger than allowed. | Correct the request body as the message says, then send it again. | No |
FUNDING_NOT_ACCEPTED | 400 | This quote is not paid from a venue account, so it takes no funding choice. | Remove the funding field. | No |
FUNDING_NOT_AVAILABLE | 404 | No pending funding step is available to this caller for this order. | Read the order’s current state; terminal orders do not offer funding data. Check the order id and workspace if no order is visible. | No |
FUNDING_SHORTFALL | 409 | The venue account holds less than the trade needs; nothing was sent. | Fund the venue account, then request a new quote. | No |
HELD_QUOTE_SOURCE_UNRESOLVED | 409 | The held quote’s trading source or exact venue account can no longer be resolved; nothing was sent. | Request a new quote, then place the order on it. | No |
HIGH_SLIPPAGE_ACK_REQUIRED | 422 | The quote’s slippage is above the threshold that needs acknowledgement. | Acknowledge the high slippage in the request, or choose a better quote. | No |
IDEMPOTENCY_AUTHORITY_REQUIRED | 403 | The caller no longer holds the authority needed to replay this stored response. | Use a credential with the same authority as the original request. | No |
IDEMPOTENCY_CONFLICT | 409 | This Idempotency-Key was already used with a different request body. | Use a new Idempotency-Key for a different request. | No |
IDEMPOTENCY_KEY_INVALID | 400 | The Idempotency-Key header is repeated, padded, empty or too long. | Send one Idempotency-Key of 1 to 255 characters. | No |
IDEMPOTENCY_KEY_REQUIRED | 400 | This operation requires an Idempotency-Key header. | Add an Idempotency-Key header and send the request again. | No |
IDEMPOTENCY_UNAVAILABLE | 503 | The request’s idempotency record could not be verified. | Retry with the same Idempotency-Key shortly. | Yes |
INSUFFICIENT_BALANCE | 422 | The paying wallet does not hold enough of the input asset. | Add funds or lower the amount, then place the order again. | No |
INSUFFICIENT_LIQUIDITY | 422 | No venue has enough liquidity for this amount right now. | Try a smaller amount, or try again later. | No |
INSUFFICIENT_LP_BALANCE | 422 | The workspace’s balance with this liquidity provider does not cover the order. | Deposit funds with the provider, then place the order again. | No |
INSUFFICIENT_PERMISSION | 403 | The caller’s role or key permissions do not allow this action. | Ask a workspace admin for the permission the message names. | No |
INSUFFICIENT_SCOPE | 403 | The API key lacks the scope this operation needs. | Use a key that holds the scope the message names. | No |
INSUFFICIENT_WORKSPACE_PERMISSION | 403 | The caller’s workspace role lacks the permission this read needs, such as View settlements for the maker projection or attribution for a per-member summary. | Ask a workspace admin for the permission the message names, or read a projection your role allows. | No |
INTEGRATION_APP_FORBIDDEN | 403 | The integration app is not allowed to use this quote or order. | Use the integration app the quote was requested with. | No |
INTEGRATION_APP_MISMATCH | 403 | The request’s integration app differs from the quote’s. | Use the integration app the quote was requested with. | No |
INTEGRATION_APP_UNAVAILABLE | 503 | The integration app binding could not be read. | Retry the same request shortly, with backoff. | Yes |
INTEGRITY_FAILED | 400 | The quote’s integrity check failed: it was changed after it was issued. | Send the quote exactly as returned, or request a new one. | No |
INTERNAL_ERROR | 500 | Something went wrong on TetraFi’s side. | Contact TetraFi support with the requestId; do not retry in a loop. | No |
INVALID_AMOUNT | 400 | An amount is not a positive exact decimal within the asset’s precision. | Correct the request body as the message says, then send it again. | No |
INVALID_API_KEY_ID | 400 | The apiKeyId filter is empty or carries surrounding whitespace. | Send the API key id exactly, or leave the filter out. | No |
INVALID_CATEGORY | 400 | The category filter is not one of direct, sub_workspace or affiliated. | Send a listed category, or leave the filter out. | No |
INVALID_CHANNEL | 400 | The channel filter is not one of ui, api, whitelabel or embedded. | Send a listed channel, or leave the filter out. | No |
INVALID_CURSOR | 400 | The cursor is not one this API issued. | Start the listing again without a cursor. | No |
INVALID_FUNDER | 400 | The funder is not a 20-byte 0x-hex address. | Correct the request body as the message says, then send it again. | No |
INVALID_METADATA | 400 | The request’s metadata is not valid. | Correct the request body as the message says, then send it again. | No |
INVALID_REQUEST | 400 | The request could not be read or has the wrong shape; details.field names the field when one is at fault. | Correct the request as the message and details say, then send it again. | No |
INVALID_SORT_BY | 400 | The sortBy value is not createdAt or amountUsd. | Send a listed sortBy, or leave it out. | No |
INVALID_SORT_ORDER | 400 | The sortOrder value is not asc or desc. | Send asc or desc, or leave it out. | No |
INVALID_SOURCE_WORKSPACE_ID | 400 | The sourceWorkspaceId filter is not a workspace id. | Send a workspace UUID, or leave the filter out. | No |
INVALID_TRADE_PERIOD | 400 | The from and to filters do not form a valid period. | Send a from that is not after to, at most 366 days apart. | No |
INVALID_WORKSPACE_ID | 400 | The workspace id is not a valid workspace id. | Correct the request body as the message says, then send it again. | No |
IP_NOT_ALLOWED | 403 | The API key is restricted to an IP allowlist that does not include this caller. | Call from an allowed IP, or update the key’s allowlist. | No |
JWT_REQUIRED | 403 | This action needs a signed-in person, not an API key. | Have a member perform it in a signed-in session. | No |
KEY_ACCESS_CHANGED | 403 | The API key’s access changed since the request was admitted. | Retry the request so it is admitted under the key’s current access. | No |
KEY_AUTHORITY_REQUIRED | 403 | The request needs a current workspace key with the required permission. | Use a current key that holds the permission. | No |
KEY_AUTHORITY_UNAVAILABLE | 503 | The API key’s current authority could not be read. | Retry the same request shortly, with backoff. | Yes |
KEY_IP_EVIDENCE_EXPIRED | 503 | The key’s verified IP evidence has expired; this read does not renew it. | Verify the account’s key to renew its evidence, then read again. | Yes |
KYC_EXPIRED | 403 | The identity or company verification this order is checked against has expired; nothing was admitted or sent. | Renew the verification the message names, then place the order again. | No |
KYC_NOT_VERIFIED | 403 | The identity or company verification this order is checked against is not complete; nothing was admitted or sent. | Complete the verification the message names, then place the order again. | No |
LEGACY_CEX_LANE_RETIRED | 409 | This liquidity provider’s old connection path is retired. | Connect the provider as a venue account, then request new quotes. | No |
LP_CREDIT_EXHAUSTED | 422 | The liquidity provider has no available credit for this order. | Lower the amount, or choose another quote. | No |
LP_DEFERRED_SETTLEMENT_UNAVAILABLE | 403 | An LP workspace’s desk trading settles on chain; deferred (credit) settlement is not available to it, so nothing was placed. | Choose a quote that settles on chain. | No |
LP_ENTITY_RETIRED | 409 | The account belongs to a retired LP identity and cannot provide funding instructions. | Reconnect the account using the current LP identity. | No |
LP_ORDER_REJECTED | 422 | The liquidity provider rejected the order’s terms. | Review the order terms, or choose another quote. | No |
LP_PREFUNDED_BALANCE_REQUIRED | 422 | This liquidity provider needs a prefunded balance before it can quote. | Deposit funds with the provider, then request quotes again. | No |
LP_REQUIREMENT_FACT_UNREADABLE | 409 | The liquidity provider enforces a serving requirement on a fact recorded for this workspace that could not be read (for example a placeholder country); nothing was sent. | Check the fact in the workspace’s company profile and correct it, or contact TetraFi support. | No |
LP_REQUIREMENT_INFORMATION_NEEDED | 409 | The liquidity provider enforces a serving requirement on information this workspace has not recorded; nothing was sent. details.items names the onboarding items that supply it, and lpId the provider. | Record the named items in the workspace’s company profile, then request a new quote. | No |
LP_WORKSPACE_LINK_MISSING | 503 | This LP workspace has no recorded LP link, so its trades cannot be read. | Contact TetraFi support with the requestId; do not retry in a loop. | No |
MAX_WEBHOOKS_REACHED | 400 | The workspace already has the maximum number of webhook endpoints. | Delete an endpoint you no longer use, then register again. | No |
METADATA_INVALID | 400 | The order’s metadata must be a JSON object. | Correct the request body as the message says, then send it again. | No |
METHOD_NOT_ALLOWED | 405 | This HTTP method is not allowed on this path. | Use the method the API reference lists for this path. | No |
MFA_ENROLMENT_REQUIRED | 403 | The workspace requires a second factor for money actions, and the member has none enrolled. | Enrol an authenticator for the member, then retry. | No |
MFA_REQUIRED | 403 | This action needs a session that completed its second factor. | Complete the second factor, then retry. | No |
MFA_STALE | 403 | Trading needs a second factor confirmed within the last 12 hours; nothing was placed. | Confirm the second factor again, then retry. | No |
MIN_RECEIVE_INVALID | 400 | The minimum receive is not a positive amount. | Correct the request body as the message says, then send it again. | No |
MIN_RECEIVE_NOT_ACCEPTED | 400 | This quote executes at the price shown, so it takes no minimum receive. | Remove minReceive from the order. | No |
MIN_RECEIVE_REQUIRED | 400 | This venue needs the least you accept to receive. | Set minReceive on the order. | No |
MISSING_WORKSPACE | 400 | A workspace is required for this request. | Send the request with a workspace-bound credential or workspace id. | No |
NOT_FOUND | 404 | Nothing exists at this path, or it is not visible to the caller. | Check the path and id. | No |
NO_ELIGIBLE_SOLVERS | 400 | No venue is eligible for this request. | Change the pair, amount or filters, or connect a venue that serves it. | No |
OBSERVATION_AUTHORITY_REQUIRED | 403 | The caller lacks current authority to read this. | Use a credential with read access to this resource. | No |
OBSERVATION_AUTHORITY_UNAVAILABLE | 503 | The caller’s current read authority could not be checked. | Retry the same request shortly, with backoff. | Yes |
ONCHAIN_WALLET_NOT_USABLE | 403 | This quote is indicative because the API key cannot use the organisation wallet. | Grant the key an organisation wallet before ordering, then request fresh quotes. | No |
OPERATION_NOT_SUPPORTED | 400 | This order does not support that operation. | Use an operation the order’s type supports. | No |
ORDER_ADMISSION_UNAVAILABLE | 503 | Whether this order is already registered could not be confirmed. | Retry with the same request shortly; it will not create a second order. | Yes |
ORDER_CANCELLED | 409 | This order was cancelled before dispatch; nothing was placed. | Read the order; request a new quote to trade again. | No |
ORDER_EXPIRED | 400 | The order’s signed payload has expired. | Request a new quote, then place the order on it. | No |
ORDER_HELD_FOR_REVIEW | 403 | The order is held for compliance review. | Wait for the review outcome; do not place it again. | No |
ORDER_ID_CONFLICT | 409 | This order id is already registered for a different request. | Read the existing order, or request a new quote. | No |
ORDER_IN_PROGRESS | 409 | This order is still being placed. | Wait for the Retry-After period, then read the order. | Yes |
ORDER_NOT_CANCELLABLE | 409 | This order already dispatched or its funding or delivery progressed. | Read the current order status; cancellation changed nothing. | No |
ORDER_NOT_FOUND | 404 | No order with this id is visible to the caller. | Check the order id and the workspace. | No |
ORDER_RECORD_PENDING_RECOVERY | 503 | The source transaction ran, but the order could not be recorded yet; the quote claim is kept. | Register the same source transaction again to recover the order; do not sign or send another trade. | No |
ORDER_REFUSED | 409 | This order was refused by a pre-trade check before anything was sent; a refused order is final. | Read the order for the reason, clear it, then request a new quote and place a new order. | No |
ORDER_SIGNING_AUTHORIZATION_CONFLICT | 400 | A retained authorization cannot be combined with a new owner proof. | Send either the retained authorization or a new proof, not both. | No |
ORDER_SIGNING_CONTEXT_REQUIRED | 400 | The order’s signing needs a workspace and signer context. | Send the signer context the preparation asked for. | No |
ORDER_SIGNING_SOURCE_CONFLICT | 400 | The order names conflicting signing sources. | Name one signing source. | No |
ORDER_SIGNING_WALLET_MISMATCH | 409 | The signing wallet is not the wallet the order was prepared for. | Sign with the prepared wallet, or prepare the order again. | No |
ORDER_SIZE_EXCEEDS_LP_LIMIT | 422 | The amount is above the liquidity provider’s limit. | Lower the amount. | No |
ORDER_TYPE_UNSUPPORTED | 400 | This order type cannot be signed this way. | Use a quote whose order type supports the chosen signing. | No |
OWNER_AUTHORIZATION_NOT_ACCEPTED | 400 | This quote is paid from a wallet that signs itself, so it takes a signature, not an owner approval. | Send the wallet’s signature instead. | No |
PAY_WALLET_SHORT | 422 | The paying wallet holds less than the trade needs; details names the shortfall. | Top up the wallet or choose another one, then request a new quote. | No |
PAY_WALLET_UNAVAILABLE | 409 | The paying wallet the quote held was removed. | Request a new quote, then place the order on it. | No |
PERIOD_CAPACITY_EXCEEDED | 409 | The trade would exceed the workspace’s approved capacity for this period; nothing was sent. | Lower the amount, or wait for the next period. | No |
PERMIT_MISMATCH | 400 | funderPermit2 does not match the prepared permit. | Sign the permit exactly as prepared. | No |
PERSONAL_TARGET_NOT_ALLOWED | 409 | This credential named a member’s personal account in source.tradingWallets; only that member’s own session trades from it. No venue was asked. | Name an organisation wallet the credential is granted. | No |
PILOT_TRADE_CAP_EXCEEDED | 409 | The trade is above this venue’s per-trade limit during its pilot; nothing was sent. | Lower the amount. | No |
PLATFORM_POLICY_UNAVAILABLE | 503 | The platform compliance policy could not be confirmed current, so the order was not admitted. | Retry the same request shortly, with backoff. | Yes |
PREFLIGHT_NOT_APPLICABLE | 409 | This quote trades on a venue account and needs no preflight. | Place the order directly. | No |
PRICES_ELIGIBILITY_UNAVAILABLE | 503 | Which venues may price for this caller could not be read. | Retry the same request shortly, with backoff. | Yes |
PRICES_ELIGIBILITY_WARMING | 503 | Price eligibility is still loading. | Retry after the Retry-After period (about one second). | Yes |
PRICES_IDENTITY_UNAVAILABLE | 503 | The current market identities could not be read. | Retry the same request shortly, with backoff. | Yes |
PRICES_POLICIES_UNAVAILABLE | 503 | The workspace’s pricing policies could not be read. | Retry the same request shortly, with backoff. | Yes |
PRICES_RATE_LIMIT | 429 | Too many price reads for this caller. | Wait for the Retry-After period, then retry. | Yes |
PRICES_SERIALIZATION_FAILED | 500 | The prices reply could not be written. | Contact TetraFi support with the requestId; do not retry in a loop. | No |
PRICES_SNAPSHOT_UNAVAILABLE | Stream event | Sent on the price stream when the current price inputs could not be verified; the stream ends. | Open a new stream subscription shortly. | Yes |
PRICES_STREAM_LIMIT | 429 | The caller already holds the maximum number of price streams. | Close a stream, then subscribe again. | Yes |
PRICES_WORKSPACE_TYPE | 403 | This workspace type cannot read prices. | Use a Company, Broker or Direct-user workspace, or finish taker onboarding. | No |
PRICE_PROTECTION_CHANGED | 409 | Changing price protection needs a new price; nothing was sent. | Request the price again with the new protection. | No |
PRODUCT_UNAVAILABLE | 422 | The venue is not offering this product right now. | Choose another pair or venue. | No |
QUOTE_ALREADY_ORDERED | 409 | This quote was already used for an order. | Read the existing order; do not place it again. | No |
QUOTE_BELOW_EXECUTION_COST | 422 | The amount does not cover the estimated execution cost. | Use a larger amount. | No |
QUOTE_BOUND_BREACH | 409 | The quote is outside the workspace’s approved price bounds; nothing was sent. | Request a new quote, then place the order on it. | No |
QUOTE_BOUND_EVIDENCE_UNAVAILABLE | 409 | The evidence for the workspace’s price bounds could not be read; nothing was sent. | Request a new quote, then place the order on it. | No |
QUOTE_CANNOT_BE_REFRESHED | 409 | The quote was recorded before it could be refreshed for a client. | Request quotes again. | No |
QUOTE_CATALOGUE_UNAVAILABLE | 503 | The asset catalogue is not loaded just now. | Retry the same request shortly, with backoff. | Yes |
QUOTE_CLAIM_UNAVAILABLE | 503 | The quote’s claim could not be recorded. | Retry the same request shortly, with backoff. | Yes |
QUOTE_EXPIRED | 410 | The quote has expired. | Request a new quote, then place the order on it. | No |
QUOTE_ID_INVALID | 400 | The quote id cannot be used. | Send the quoteId exactly as POST /quotes returned it. | No |
QUOTE_ID_UNAVAILABLE | 503 | A quote request id could not be issued. | Retry the same request shortly, with backoff. | Yes |
QUOTE_INTEGRITY_INVALID | 400 | The order needs the original authenticated quote. | Send the quote exactly as returned. | No |
QUOTE_NOT_EXECUTABLE | 409 | This price is for comparison only. | Request an executable quote first. | No |
QUOTE_NOT_FOUND | 404 | No quote with this id is available to the caller. | Check the quoteId, or request a new quote. | No |
QUOTE_NOT_HELD | 409 | The quote is no longer held; nothing was sent. | Request a new quote, then place the order on it. | No |
QUOTE_NOT_READY | 503 | The quote is still being recorded. | Retry after about one second. | Yes |
QUOTE_ORDER_UNAVAILABLE | 503 | The quote’s order could not be read. | Retry the read shortly; do not place another order until it succeeds. | Yes |
QUOTE_OUTSIDE_APPROVED_BOUNDS | 409 | The quote is outside the approved bounds; nothing was sent. | Request a new quote, then place the order on it. | No |
QUOTE_PRICE_MOVED | 409 | The price moved outside the order’s protection. | Request a new quote, or review the repricing offer if the response provides one. | No |
QUOTE_RATE_LIMITED | 429 | Venue-hitting quote requests are limited to one every 3 seconds per caller. | Wait for the Retry-After period, then request again. | Yes |
QUOTE_REQUEST_NOT_FOUND | 404 | No quote request with this id is visible to the caller. | Check the quoteRequestId. | No |
QUOTE_REQUEST_NOT_READY | 503 | The quote request was issued moments ago and is still being recorded. | Retry after about one second. | Yes |
QUOTE_REQUEST_UNAVAILABLE | 503 | The quote request could not be read. | Retry the same request shortly, with backoff. | Yes |
QUOTE_STORE_UNAVAILABLE | 503 | Held quotes cannot be read right now. | Retry the same request shortly, with backoff. | Yes |
QUOTE_VALID_UNTIL_REQUIRED | 400 | The quote carries no validity deadline, so it cannot be submitted. | Request a new quote, then place the order on it. | No |
QUOTE_WALLET_NOT_BOUND | 409 | The quote was priced before a paying wallet was chosen (its tradingSource is null and its next is requote); nothing was sent. | Choose the wallet to pay from, requote, then order the new quote. | No |
RATE_LIMITED | 429 | Too many requests from this caller. | Wait for the Retry-After period, then retry. | Yes |
RECORDS_OUT_OF_SCOPE | 403 | The order belongs to another member, and the caller cannot read other members’ orders. | Read your own orders, or use a credential with compliance view permission. | No |
REFERENCE_PRICE_UNAVAILABLE | 409 | A reference price for the bounds check could not be read; nothing was sent. | Request a new quote shortly. | No |
RELAY_CONTEXT_UNRESOLVED | 409 | The order’s compliance context could not be resolved; nothing was relayed. | Contact TetraFi support with the requestId; do not retry in a loop. | No |
RELAY_FUNDER_UNRESOLVED | 409 | The order’s funding source could not be resolved; nothing was relayed. | Contact TetraFi support with the requestId; do not retry in a loop. | No |
RELAY_RECHECK_UNAVAILABLE | 503 | The pre-send re-check could not be recorded; nothing was relayed. | Retry the same request shortly, with backoff. | Yes |
RELAY_SUBJECT_UNRESOLVED | 409 | The order’s compliance subject could not be resolved; nothing was relayed. | Contact TetraFi support with the requestId; do not retry in a loop. | No |
RELEASE_GRANT_UNAVAILABLE | 503 | The approval to release this trade could not be read. | Retry the same request shortly, with backoff. | Yes |
RELEASE_WINDOW_LAPSED | 409 | The approval window for releasing this trade has passed; nothing was sent. | Request a new quote, then place the order on it. | No |
REPRICING_OFFER_UNAVAILABLE | 409 | There is no repricing offer to accept. | Prepare the continuation again without acceptRepricing. | No |
REQUEST_BODY_TOO_LARGE | 413 | The request body is larger than allowed. | Send a smaller body. | No |
REQUEST_TIMEOUT | 408 | The request timed out on the server. | Retry the same request shortly, with backoff. | Yes |
REQUEST_UNPROCESSABLE | 422 | The request body has the wrong shape for this operation. | Correct the request body as the message says, then send it again. | No |
REQUOTE_FIELDS_CONFLICT | 400 | A requote body carries fields that cannot go with requote; details.conflicts lists them. | Send requote alone, or send a fresh quote request. | No |
REQUOTE_NEEDS_WALLET | 409 | The venue quotes once a wallet is chosen. | Bind a wallet, then requote. | No |
REQUOTE_REFUSED | 409 | The venue would not requote; details.reason says why. | Act on details.reason, or request fresh quotes. | No |
REQUOTE_REQUIRED | 409 | The firm order’s handoff could not be read, so it needs a new quote. | Requote, then sign the replacement. | No |
REQUOTE_TIMED_OUT | 504 | The venue did not answer the requote in time; the original quote still holds. | Requote again, or use the original quote before it expires. | Yes |
REQUOTE_WINDOW_CLOSED | 410 | The quote is past its requote window (retainUntil), so it can no longer be refreshed or ordered. | Search again: POST /quotes with a pair body. | No |
RESOURCE_CONFLICT | 409 | The request conflicts with the resource’s current state. | Read the current resource before trying again. | No |
RESOURCE_GONE | 410 | The resource is no longer available. | Request a new resource. | No |
RESPONSE_BUILD_FAILED | 500 | The answer could not be assembled. | Contact TetraFi support with the requestId; do not retry in a loop. | No |
RFQ_ADMISSION_UNAVAILABLE | 503 | The quote’s admission state could not be read. | Retry the same request shortly, with backoff. | Yes |
RFQ_EXECUTION_UNAVAILABLE | 409 | The route’s source setup is not available. | Choose another quote. | No |
RFQ_ORIGIN_RECOVERY_RECEIVER_MISMATCH | 409 | The recovery receiver must be the wallet that signed the funding. | Use the funding signer as the receiver. | No |
RFQ_REFIRM_CAP_EXCEEDED | 409 | The order was re-firmed as many times as the venue allows. | Request a new quote for a new order. | No |
RFQ_REFIRM_NOT_YET | 409 | The order’s current firm quote is still live, so it cannot be re-firmed yet. | Retry after the current firm quote has lapsed. | Yes |
RFQ_WALLET_SOLVER_INDEXED_ORIGIN_UNREVIEWED | 409 | This funding path for the route has not been reviewed for use. | Choose another quote. | No |
RFQ_WALLET_SOLVER_NON_RFQ_TAIL_UNREVIEWED | 409 | This funding path for the route has not been reviewed for use. | Choose another quote. | No |
ROUTE_AUTHORITY_UNAVAILABLE | 409 | The route’s execution authority could not be confirmed. | Choose another quote. | No |
ROUTE_NOT_WAITING | 409 | The order is not waiting for the taker: it is settled, still running a step, or has no continuation, so there is nothing to prepare, sign or stop. | Read the order; act only when its nextAction asks for the taker. | No |
ROUTE_SOURCE_EVIDENCE_INVALID | 400 | The source transaction hash is invalid. | Send the source transaction hash exactly. | No |
ROUTE_SOURCE_PLAN_UNAVAILABLE | 409 | The original source plan could not be verified; nothing was sent. | Request a new quote, then place the order on it. | No |
ROUTE_TRADE_INTENT_NOT_APPLICABLE | 400 | This continuation takes funderSignature and funderPermit2, not a route trade intent. | Send funderSignature and funderPermit2 instead. | No |
ROUTE_TRADE_INTENT_REQUIRED | 400 | This continuation needs routeTradeIntent and routeTradeIntentSignature. | Include both fields. | No |
ROUTE_TRADE_INTENT_TOO_LARGE | 400 | routeTradeIntent is larger than allowed. | Correct the request body as the message says, then send it again. | No |
ROUTING_OPTIONS_FORBIDDEN | 403 | The request used an option reserved for TetraFi operators. | Remove the reserved option and retry. | No |
SAME_ASSET_NEEDS_CHAIN | 400 | Paying and receiving the same asset needs a chain pinned on each side. | Pin the pay and receive chains. | No |
SCHEMA_INVALID | 400 | The order’s signed payload does not match its schema. | Request a new quote, then place the order on it. | No |
SCREENING_UNAVAILABLE | 503 | The screening provider is unavailable. | Retry the same request shortly, with backoff. | Yes |
SELF_DEALING_CHECK_UNAVAILABLE | 503 | Whether the quote’s provider is the workspace’s own liquidity could not be read, so the self-dealing check could not run; nothing was placed. | Retry the same request shortly, with backoff. | Yes |
SELF_DEALING_REFUSED | 409 | The quote comes from the workspace’s own liquidity (a solver of its own LP); a workspace cannot trade with itself, so nothing was placed. | Choose a quote from another provider. | No |
SERIALIZATION_ERROR | 500 | The settlement listing could not be encoded. | Contact TetraFi support with the requestId; do not retry in a loop. | No |
SERVER_CLOCK_UNAVAILABLE | 503 | The server clock could not be read; nothing was admitted or sent. | Retry the same request shortly, with backoff. | Yes |
SERVICE_ACCOUNT_AUTHORITY_UNAVAILABLE | 503 | The service account’s own trading grant or signing key could not be read; nothing was placed. | Retry the same request shortly, with backoff. | Yes |
SERVICE_ACCOUNT_CANNOT_REVIEW | 403 | A service account cannot read or decide another principal’s venue trade review; only human members review. | Review the trade as a human member of the workspace. | No |
SERVICE_ACCOUNT_EXPIRED | 403 | The service account has expired. | Ask a workspace admin to renew it. | No |
SERVICE_ACCOUNT_INACTIVE | 403 | The service account is not active. | Ask a workspace admin to activate it. | No |
SERVICE_ACCOUNT_INVALID | 403 | The service account id is invalid. | Check the key’s service account. | No |
SERVICE_ACCOUNT_NOT_FOUND | 403 | The service account was not found in this workspace. | Check the key’s workspace. | No |
SERVICE_ACCOUNT_PLACE_ORDER_REQUIRED | 403 | The service account’s own role does not grant Place orders, so its venue trade was not placed. | Give the service account a role with Place orders, then confirm a new quote. | No |
SERVICE_ACCOUNT_SPONSOR_MISSING | 403 | The service account’s sponsor is no longer a member of the workspace. | Ask a workspace admin to assign a new sponsor. | No |
SERVICE_ACCOUNT_SPONSOR_NOT_CURRENT | 409 | The service account’s sponsor, its accountable human, is no longer a current, unsuspended member of the workspace, so its key’s organisation-wallet trades stop, including later steps of a trade already placed. | Give the service account a current member as sponsor, or trade through another account. | No |
SERVICE_ACCOUNT_SUSPENDED | 403 | The service account is suspended. | Ask a workspace admin to lift the suspension. | No |
SERVICE_ACCOUNT_UNASSIGNED | 403 | The service account has no role. | Ask a workspace admin to assign a role. | No |
SERVICE_ACCOUNT_VENUE_KEY_NOT_CURRENT | 403 | The service account, its sponsor or the signing key that prepared the venue trade is no longer current for venue trading; nothing was placed. | Use the current service account’s venue-trading key, with an active sponsor, for both the quote and the order. | No |
SERVICE_ACCOUNT_WORKSPACE_MISSING | 403 | The service account key has no workspace binding. | Create a new key bound to the workspace. | No |
SERVICE_UNAVAILABLE | 503 | The service is unavailable. Fallback code of a 503 refusal that names no code. | Retry the same request shortly, with backoff. | Yes |
SESSION_AUTHORITY_UNAVAILABLE | 503 | The session’s current authority could not be read. | Retry the same request shortly, with backoff. | Yes |
SESSION_STORE_UNAVAILABLE | 503 | Session state is unavailable for a moment. | Retry the same request shortly, with backoff. | Yes |
SETTLEMENT_ACCOUNT_NOT_FOUND | 404 | The venue account the delayed-settlement quote names no longer exists in this workspace. | Request a new quote, then place the order on it. | No |
SETTLEMENT_CLOCK_UNAVAILABLE | 503 | The server clock that assigns the settlement window could not be read, so nothing was sent. | Retry the same request shortly, with backoff. | Yes |
SETTLEMENT_CORRIDOR_UNAVAILABLE | 503 | Settlement capabilities for the chain pair could not be read. | Retry the same request shortly, with backoff. | Yes |
SETTLEMENT_DEADLINE_UNCONFIRMED | 422 | The venue has not confirmed the settlement deadline of the window this trade would settle in, so nothing was sent. | Wait for the venue to confirm the deadline, then request a new quote. | No |
SETTLEMENT_OWNER_MISMATCH | 403 | The executing wallet is not the verified owner wallet of the order. | Use the order owner’s verified wallet. | No |
SETTLEMENT_SCHEDULE_INVALID | 422 | The venue account has no confirmed settlement schedule that can produce a window, so nothing was sent. | Confirm the account’s settlement schedule, then request a new quote. | No |
SETTLEMENT_WALLET_REQUIRED | 400 | This route needs settlementWalletId. | Include settlementWalletId. | No |
SETTLEMENT_WALLET_UNVERIFIED | 403 | settlementWalletId must be a verified owner wallet. | Verify the wallet, or choose a verified one. | No |
SETTLEMENT_WINDOW_ACCOUNT_MISMATCH | 409 | The quote’s settlement window belongs to another venue account than the one trading it, so nothing was sent. | Request a new quote, then place the order on it. | No |
SETTLEMENT_WINDOW_CHANGED | 409 | The settlement window assigned at the send is not the one the order consented to, so nothing was sent. The body’s currentWindow is the window assigned now. | Review currentWindow, then send the same quote again with settlementWindowId set to its windowId. | No |
SETTLEMENT_WINDOW_DEPOSIT_FIRST_UNSUPPORTED | 422 | A credit trade settles in the account’s settlement window, so it cannot trade deposit-first. | Trade from the account balance. | No |
SETTLEMENT_WINDOW_NOT_APPLICABLE | 422 | settlementWindowId was sent on a quote that settles immediately. | Send the order without settlementWindowId. | No |
SETTLEMENT_WINDOW_NOT_CONSENTED | 422 | This trade uses credit, so it settles in the account’s settlement window, and the send named no consented window. | Place the order on the quote, which carries its settlement window. | No |
SETTLEMENT_WINDOW_NOT_QUOTED | 422 | The delayed-settlement quote was held without its settlement window. | Request a new quote, then place the order on it. | No |
SETTLEMENT_WINDOW_TERMS_PENDING | 422 | This trade uses credit, so it settles in the venue account’s settlement window, and the venue has not confirmed when that window closes, so nothing was sent. | Record the venue’s answer on the account’s schedule request, then request a new quote. | No |
SETTLEMENT_WINDOW_UNAVAILABLE | 503 | The settlement window could not be verified, so nothing was sent. | Retry the same request shortly, with backoff. | Yes |
SIGNATURE_FORMAT_INVALID | 400 | The signature is not 65 bytes. | Send the 65-byte signature as hex. | No |
SIGNATURE_INVALID | 400 | The wallet signature does not verify. | Sign the prepared order with its funding wallet again. | No |
SIGNATURE_NOT_ACCEPTED | 400 | This quote trades on a venue account and takes no wallet signature. | Remove the signature. | No |
SIGNATURE_TOO_LONG | 400 | The signature is longer than allowed. | Correct the request body as the message says, then send it again. | No |
SIGNED_KEY_NOT_EXCHANGEABLE | 400 | The token endpoint (POST /api/v1/oauth/token) refused to exchange a key that requires request signing or holds venue trading: a bearer token would drop the per-request signature that key’s authority rests on. It answers the RFC 6749 body, error unauthorized_client, with this code’s reference in error_uri. | Keep using the key directly and sign each request with its HMAC secret, or exchange a service-account key without request signing or venue trading. | No |
SIGNED_OUTPUT_BOUND_UNATTACHABLE | 409 | The signed minimum receive cannot be attached to its wallet action. | Request a new quote, then place the order on it. | No |
SIGNED_OUTPUT_BOUND_UNREADABLE | 409 | The signed minimum receive cannot be read. | Request a new quote before signing. | No |
SIGNER_LACKS_RIGHT | 409 | The wallet’s signer lacks the right this trade needs; nothing was signed. | Grant the signer the right, or choose another wallet. | No |
SIGNER_UNAVAILABLE | 409 | The wallet’s signer is not available; nothing was signed. | Retry later, or choose another wallet. | No |
SOLANA_DOMAIN_MISMATCH | 400 | The Solana order’s domain does not match the signed message. | Request a new quote, then place the order on it. | No |
SOLANA_ORDER_DEADLINE_PASSED | 422 | The Solana order’s deadlines have passed. | Request a new quote, then place the order on it. | No |
SOLANA_ORDER_NOT_OPEN | 422 | The Solana transaction did not open the expected escrow order. | Check the transaction, or request a new quote. | No |
SOLANA_ORDER_RECORD_DERIVATION_FAILED | 500 | The Solana order record address could not be derived. | Contact TetraFi support with the requestId; do not retry in a loop. | No |
SOLANA_ORDER_RECORD_MISMATCH | 422 | The Solana escrow order does not match the quoted order. | Request a new quote, then place the order on it. | No |
SOLANA_ORDER_SERIALIZATION_FAILED | 500 | The Solana order could not be serialized. | Contact TetraFi support with the requestId; do not retry in a loop. | No |
SOLANA_ORIGIN_FUNDING_MISMATCH | 422 | The Solana order was not opened by the order’s own user. | Open the order from the order owner’s wallet. | No |
SOLANA_ORIGIN_NOT_CONFIRMED | 422 | The Solana origin transaction is not confirmed yet. | Wait for confirmation, then submit again. | Yes |
SOLANA_ORIGIN_ORDER_MISMATCH | 400 | svmOriginSubmission.orderId does not match the order. | Correct the request body as the message says, then send it again. | No |
SOLANA_ORIGIN_SIGNATURE_MISMATCH | 400 | The order signature must equal the Solana origin transaction signature. | Correct the request body as the message says, then send it again. | No |
SOLANA_ORIGIN_SUBMISSION_MALFORMED | 400 | svmOriginSubmission is malformed. | Correct the request body as the message says, then send it again. | No |
SOLANA_ORIGIN_SUBMISSION_REQUIRED | 400 | Solana orders need svmOriginSubmission for the confirmed escrow-open transaction. | Include svmOriginSubmission. | No |
SOLANA_ORIGIN_TRANSACTION_FAILED | 422 | The Solana origin transaction failed. | Request a new quote, then place the order on it. | No |
SOLANA_ORIGIN_TRANSACTION_MISMATCH | 400 | The Solana origin transaction was not signed by the funding wallet. | Submit the transaction the funding wallet signed. | No |
SOLANA_REGISTRY_DRIFT | 422 | The quoted Solana escrow no longer matches the active deployment. | Request a new quote, then place the order on it. | No |
SOLANA_REGISTRY_NOT_READY | 422 | The Solana deployment is not fully configured. | Choose another quote. | No |
SOLANA_RPC_UNAVAILABLE | 422 | The Solana transaction cannot be verified because no Solana node is configured. | Choose another quote. | No |
SOLANA_SOURCE_AUTHORIZATION_INVALID | 400 | The Solana source permit is invalid. | Sign the source permit again as prepared. | No |
SOLANA_SOURCE_EXECUTION_UNAVAILABLE | 503 | Source execution is temporarily unavailable. | Retry the same request shortly, with backoff. | Yes |
SOLANA_SOURCE_LOOKUP_TABLE_INVALID | 409 | The prepared source transaction’s address lookup table cannot be used. | Request a new quote, then place the order on it. | No |
SOLANA_SOURCE_PERMIT_CORRUPT | 409 | The retained source authorization could not be decoded. | Contact TetraFi support with the requestId; do not retry in a loop. | No |
SOLANA_SOURCE_PERMIT_EXPIRED | 410 | The source authorization expired. | Request a new quote, then place the order on it. | No |
SOLANA_SOURCE_PERMIT_NOT_FOUND | 404 | The prepared source authorization was not found. | Request a new quote, then place the order on it. | No |
SOLANA_SOURCE_PERMIT_OWNER_MISMATCH | 403 | The source authorization belongs to another wallet. | Use the funding wallet’s authorization. | No |
SOLANA_SOURCE_PERMIT_REQUIRED | 400 | This order requires the prepared source authorization. | Include the source authorization from preparation. | No |
SOLANA_SOURCE_PLAN_INVALID | 409 | The source transaction’s plan is no longer usable. | Request a new quote, then place the order on it. | No |
SOLANA_SOURCE_PROVIDER_EXECUTION_FAILED | 409 | The wallet provider could not execute the source transaction. | Read the order before trying again. | No |
SOLANA_SOURCE_QUOTE_INVALID | 400 | The source quote does not match its prepared authorization. | Request a new quote, then place the order on it. | No |
SOLANA_SOURCE_QUOTE_MISMATCH | 409 | The Solana source authorization no longer matches its quote and route. | Request a new quote, then place the order on it. | No |
SOLANA_SOURCE_REFERENCE_INVALID | 400 | The source transaction reference is invalid. | Correct the request body as the message says, then send it again. | No |
SOLANA_SOURCE_REGISTRY_DRIFT | 409 | The source transaction’s active deployment changed. | Request a new quote, then place the order on it. | No |
SOLANA_SOURCE_ROLE_DRIFT | 409 | The source transaction’s required authority changed. | Request a new quote, then place the order on it. | No |
SOLANA_SOURCE_RPC_UNAVAILABLE | 503 | The source transaction’s network could not be read. | Retry the same request shortly, with backoff. | Yes |
SOLANA_SOURCE_SIGNATURE_CONFLICT | 409 | Another signature is already retained for this authorization. | Follow the existing source transaction. | No |
SOLANA_SOURCE_SIGNATURE_INVALID | 400 | The Solana source signature does not verify. | Sign the source permit again with the funding wallet. | No |
SOLANA_SOURCE_SIGNING_FAILED | 409 | The wallet could not sign the source transaction. | Check the wallet’s signing authority before trying again. | No |
SOLANA_SOURCE_SIMULATION_REJECTED | 409 | The source transaction failed its pre-send simulation. | Request a new quote, then place the order on it. | No |
SOLANA_SOURCE_STATE_DRIFT | 409 | The source transaction’s prepared state changed. | Request a new quote, then place the order on it. | No |
SOLANA_SOURCE_STATE_UNAVAILABLE | 409 | The source transaction’s retained state could not be read. | Retry the same request shortly, with backoff. | Yes |
SOLANA_SOURCE_TRANSACTION_FAILED | 409 | The source transaction failed. | Read the order before starting another trade. | No |
SOLANA_TRANSACTION_MALFORMED | 400 | The Solana order payload is malformed. | Request a new quote, then place the order on it. | No |
SOLANA_WORKSPACE_ROUTER_MISMATCH | 422 | The quoted Solana settlement contract is not the workspace’s active one. | Request a new quote, then place the order on it. | No |
SOLANA_WORKSPACE_ROUTER_MISSING | 422 | The Solana order needs an authenticated workspace with a settlement contract. | Send the request with a workspace credential, or choose another quote. | No |
SOURCE_LEG_RECOVERED | 409 | The source transaction succeeded but its funds were returned to the payer instead of starting the route. | Request a new quote for a new order. | No |
SOURCE_NOT_OWNED | 403 | A source names a wallet or account this caller cannot use: unknown, outside this workspace, or outside the key’s grants. | Name a wallet or account from the answer’s sourceOptions. | No |
SOURCE_RECOVERY_CLAIM_MISMATCH | 409 | This source does not belong to the retained quote claim. | Register the source of this order’s own claim. | No |
SOURCE_RECOVERY_QUOTE_INVALID | 409 | The recovery quote does not match its held terms. | Use the recovery quote exactly as held. | No |
SOURCE_RECOVERY_UNAVAILABLE | 503 | The retained recovery claim could not be read. | Retry shortly; do not send another trade. | Yes |
STEP_UP_ALREADY_USED | 403 | This step-up proof was already used. | Complete a new step-up and retry with its proof. | No |
STEP_UP_EXPIRED | 403 | The step-up proof has expired. | Complete a new step-up and retry with its proof. | No |
STEP_UP_REQUIRED | 403 | This trade needs a fresh step-up confirmation; details.stepUpSubject names it. | Complete the step-up for that subject and retry with stepUpProof. | No |
STEP_UP_SUBJECT_MISMATCH | 403 | The step-up proof was made for a different action. | Complete the step-up for the subject this refusal names. | No |
STEP_UP_UNAVAILABLE | 503 | The step-up check could not be performed. | Retry the same request shortly, with backoff. | Yes |
STORAGE_ERROR | 500 | A storage error occurred on TetraFi’s side. | Contact TetraFi support with the requestId; do not retry in a loop. | No |
TAKER_ADMISSION_UNAVAILABLE | 503 | The workspace’s taker admission could not be read. | Retry the same request shortly, with backoff. | Yes |
TAKER_ONBOARDING_INCOMPLETE | 403 | TetraFi has turned off desk trading for this LP workspace. | Contact TetraFi support to turn desk trading back on. | No |
TAKER_WORKSPACE_TYPE | 403 | This workspace type cannot request taker prices or quotes. | Use a taker workspace, or finish taker onboarding. | No |
TARGET_NOT_ALLOWED_FOR_SLOT | 400 | The bound wallet cannot be used for that slot. | Bind a wallet allowed for the slot the message names. | No |
TRADER_SIGNATURE_NOT_APPLICABLE | 400 | Only certain continuations take a traderSignature. | Remove traderSignature. | No |
TRADER_SIGNATURE_REQUIRED | 409 | The continuation needs the client’s trader signature. | Sign traderTypedData and send it as traderSignature. | No |
TRADE_CONSUMED_READ_UNAVAILABLE | 503 | Whether the trade was already used could not be read. | Retry the same request shortly, with backoff. | Yes |
TRADE_EXPORT_INCOMPLETE | 503 | Some trades could not be read, so no export file was made; the JSON list still answers. | Retry the same request shortly, with backoff. | Yes |
TRADE_LEDGER_AUTHORIZATION_INVALID | 409 | The signed trade authorization no longer matches the quote. | Refresh quotes and sign again. | No |
TRADE_LEDGER_AUTHORIZATION_REQUIRED | 400 | This order needs tradeLedgerAuthorization. | Include the signed tradeLedgerAuthorization. | No |
TRADE_LEDGER_INSUFFICIENT_BALANCE | 422 | The on-chain trading account does not hold enough for this order. | Deposit funds to the account, then place the order again. | No |
TRADE_LEDGER_INTENT_INVALID | 400 | The order payload is not a valid trade intent. | Request a new quote, then place the order on it. | No |
TRADE_NOT_FOUND | 404 | No trade with this id is visible in the workspace. | Check the trade id, and that it belongs to the workspace in the path. | No |
TRADE_PROJECTION_UNAVAILABLE | 503 | The requested trade projection is not available on this stack. | Retry the same request shortly, with backoff. | Yes |
TRADING_SOURCE_NOT_LINKED | 409 | The selected trading source is not linked to the venue account this quote would use. | Choose a linked trading source, or link it on the venue account, then request quotes again. | No |
TRANSPORT_PATHWAY_UNREACHABLE | 422 | The settlement transport for this chain pair has no live path. | Choose a different chain pair or quote. | No |
TREASURY_DISABLED | 503 | Trade preparation is not available on this server. | Choose a quote that does not trade on a venue account. | No |
TREASURY_FREEZE_UNAVAILABLE | 503 | The workspace’s freeze state could not be read. | Retry the same request shortly, with backoff. | Yes |
TREASURY_FROZEN | 423 | The workspace is frozen, so money movements are refused. | Ask a workspace admin to lift the freeze. | No |
UNKNOWN_ASSET | 400 | The asset is not in the catalogue; details.value names it. | Use an asset listed by GET /assets. | No |
UNKNOWN_CHAIN | 400 | The chain is not known; details.value names it. | Use a chain listed by GET /assets. | No |
UNKNOWN_VENUE | 400 | The venue is not known; details.value names it. | Use a venue id from a quote or GET /prices. | No |
UNSUPPORTED_CONTENT_TYPE | 415 | The body is not sent as application/json. | Send the body with Content-Type: application/json. | No |
UPSTREAM_TIMEOUT | 504 | An upstream service timed out. | Retry the same request shortly, with backoff. | Yes |
UPSTREAM_UNAVAILABLE | 502 | An upstream service is unavailable. | Retry the same request shortly, with backoff. | Yes |
USABLE_SET_UNAVAILABLE | 503 | The wallets this caller may use could not be read. | Retry the same request shortly, with backoff. | Yes |
USER_NOT_IN_UMBRELLA | 404 | The userId filter names a user outside the caller’s umbrella. | Filter by a user of a workspace under your umbrella. | No |
USER_RESOLUTION_FAILED | 500 | The caller’s user identity could not be resolved. | Contact TetraFi support with the requestId; do not retry in a loop. | No |
VALIDATION_ERROR | 400 | The request failed validation. | Correct the request body as the message says, then send it again. | No |
VENUE_ACCOUNT_FUNDING_VENUE_DISABLED | 409 | Only a disabled venue holds the account’s balance key, so no deposit details were released. | Re-enable that venue in the account’s Controls, then read again. | No |
VENUE_ACCOUNT_FUNDS_IN_WALLETS | 409 | This wallet-based venue keeps funds in its linked wallets, not a venue account. | Read the linked trading wallets in Treasury instead. | No |
VENUE_ACCOUNT_HAS_NO_KEY | 409 | The venue account has no current funding key. | Connect or rotate the account’s key, then read again. | No |
VENUE_ACCOUNT_INSUFFICIENT_AVAILABLE_FUNDS | 409 | The paying account or wallet holds too little that is not already held for other open orders; nothing was placed. | Fund the account, or wait for its open orders to finish, then request a fresh quote. | No |
VENUE_ACCOUNT_KEY_NOT_CONNECTED | 409 | The venue account’s funding key is not connected. | Reconnect and verify the account’s key. | No |
VENUE_ACCOUNT_NOT_CONFIGURED | 409 | The venue account is not configured for this funding read. | Complete the account’s setup and verification. | No |
VENUE_ACCOUNT_NOT_FOUND | 404 | This workspace has no venue account with that id. | Use an account id from this workspace’s venue accounts. | No |
VENUE_ACCOUNT_REVERIFY_REQUIRED | 409 | No current key holds this venue account’s balance. | Re-verify or rotate the account’s key, then read its instructions again. | No |
VENUE_ACCOUNT_REVOKED | 409 | This venue account is disconnected. | Reconnect the venue account before reading its funding instructions. | No |
VENUE_ACCOUNT_SERVICE_TIMEOUT | 503 | The venue-account funding read timed out. | Retry the same request shortly, with backoff. | Yes |
VENUE_ACCOUNT_SERVICE_UNAVAILABLE | 503 | The venue-account funding service is unavailable. | Retry the same request shortly, with backoff. | Yes |
VENUE_ACCOUNT_UNVERIFIED | 409 | The venue account is not verified with the venue. | Verify the venue account, then request a new quote. | No |
VENUE_ACCOUNT_VENUE_UNKNOWN | 409 | The account’s venue is not recognised. | Reconnect the account to a supported venue. | No |
VENUE_ADAPTER_ERROR | 502 | The liquidity provider is temporarily unavailable. | Retry the same request shortly, with backoff. | Yes |
VENUE_BALANCES_UNREADABLE | 503 | The venue account’s balance answer could not be built; no balances were released. | Retry the same request shortly, with backoff. | Yes |
VENUE_CANNOT_FILL | 503 | The chosen liquidity provider cannot fill this trade right now. | Request new quotes, or choose another quote. | No |
VENUE_CLIENT_ERROR | 400 | The liquidity provider refused the order request. | Request a new quote, or choose another venue. | No |
VENUE_CONNECTION_AUTHORITY_UNAVAILABLE | 503 | Current authority could not be confirmed at the deposit disclosure boundary; no instructions were released. | Check that the caller still has wallet-view authority, then retry shortly. | Yes |
VENUE_CONNECTION_CHANGED | 409 | The account’s connection, key or controls changed during the read; no instructions were released. | Read the current account, then request its instructions again. | Yes |
VENUE_CONNECTION_INVALID | 400 | The deposit selection or stored funding configuration cannot be used. | Correct the currency, asset, network or linked bank selection as the message says; re-verify the account if its configuration is invalid. | No |
VENUE_CONNECTION_NOT_FOUND | 404 | The account’s venue connection could not be found in this workspace. | Read the current venue account and use its current connection. | No |
VENUE_CONNECTION_STORAGE_UNAVAILABLE | 503 | The venue account’s current funding state could not be read or its disclosure audit could not be committed. | Retry the same request shortly, with backoff. | Yes |
VENUE_CONNECTION_WORKSPACE_TYPE | 403 | This workspace type cannot read venue-account funding instructions. | Use a Company or Broker workspace, or an LP workspace admitted as a taker. | No |
VENUE_CREDENTIAL_ENVELOPE_INVALID | 503 | The account’s funding credential could not be verified or opened. | Rotate the account’s key; contact support if the failure persists. | No |
VENUE_CREDENTIAL_KEY_UNAVAILABLE | 503 | The service needed to open the account’s funding credential is unavailable. | Retry the same request shortly, with backoff. | Yes |
VENUE_CREDIT_HOLD_NOT_RESERVED | 409 | The credit held for this firm price is no longer reserved (used or released); nothing was sent. | Request a new quote, then place the order on it. | No |
VENUE_DATA_UNAVAILABLE | 422 | The venues could not read their own balances or prices just now. | Retry the same request shortly, with backoff. | Yes |
VENUE_FIRM_QUOTE_BUDGET_EXHAUSTED | 429 | The declared venue quote-rate pool is spent; no new provider ask was sent. | Wait for details.retryAfter or details.retryAfterMs, then deliberately retry; details.reason is tetrafi:declaredPool. | Yes |
VENUE_FIRM_QUOTE_COUNT_UNREADABLE | 409 | The workspace’s daily firm-quote count could not be read; the price remains blocked and no new ask is sent. | Try again to read the count before requesting a firm price. | Yes |
VENUE_FIRM_QUOTE_LIMITED | 429 | This venue’s firm-quote limit is reached. | Wait for the Retry-After period, then retry. | Yes |
VENUE_HELD_QUOTE_NOT_ADOPTABLE | 409 | The held firm price no longer matches this order (its account, revisions, principal or bounds), so it cannot be adopted; nothing was sent. | Request a new quote, then place the order on it. | No |
VENUE_KEY_IP_RESTRICTION_REQUIRED | 409 | The account’s key does not have the required IP restriction. | Apply the required IP restriction at the venue, then verify the key. | No |
VENUE_NOT_AVAILABLE | 409 | This venue is not available for the funding read. | Use an available venue account. | No |
VENUE_NOT_AVAILABLE_TO_CREDENTIAL | 403 | This credential cannot ask this venue for a firm quote. | Use a credential with Request quotes and Place orders, or a member session. | No |
VENUE_OPERATION_MISMATCH | 409 | The order does not match the venue operation it continues. | Read the operation, or request a new quote. | No |
VENUE_ORDER_PREPARATION_REFUSED | 409 | The venue order could not be built from this firm price; nothing was sent. | Request a new quote, then place the order on it. | No |
VENUE_POLICY_UNAVAILABLE | 503 | How this venue executes cannot be read right now; nothing was sent. | Retry the same request shortly, with backoff. | Yes |
VENUE_QUOTE_NOT_PRICED | 409 | The venue returned no price for the firm ask; nothing was sent. | Request the price again. | No |
VENUE_QUOTE_OUTSIDE_BOUNDS | 409 | The venue’s firm price is below the order’s minimum receive; nothing was sent. | Request a new price, or lower the minimum receive. | No |
VENUE_QUOTE_RATE_LIMITED | 429 | The named venue is limiting quote requests; the request remains counted and nothing was placed. | Wait for Retry-After (also details.retryAfter), then deliberately request again; details.reason names the retry timing source. | Yes |
VENUE_QUOTE_SEND_WINDOW_CLOSED | 409 | The order arrived before the quote’s expiresAt, but the venue’s firm price reached its send deadline before it could be sent; nothing was sent. | Request a new quote, then place the order on it. | No |
VENUE_READ_AUTHORITY_REFUSED | 403 | The caller’s authority to read the workspace’s venue accounts ended during the read; nothing was released. reason authority_ended: the credential or session was revoked or expired, no longer carries treasury_read, or no longer meets the workspace’s MFA requirement. reason permission_withdrawn: its principal lost ViewWallets, its workspace membership or taker admission. | Use a current credential with treasury_read whose principal holds ViewWallets, then read again. | No |
VENUE_REGISTRY_UNAVAILABLE | 503 | The venue registry needed for the funding read is unavailable. | Retry the same request shortly, with backoff. | Yes |
VENUE_SEND_DEADLINE_UNDECLARED | 409 | This venue declares no send deadline for its firm prices, so the order cannot be bounded; nothing was sent. | Request a quote from another venue. | No |
VENUE_TRADE_INITIATOR_NOT_PERMITTED | 403 | The venue account refused this initiator: it is neither a current workspace member nor an active human-operated service account, with a current sponsor, acting through an unrevoked signing key that has venue trading switched on and the workspace_venue_trade scope. Nothing was placed. | Use a current member, or a current human-operated service account’s venue-trading key, and the same key for the quote and the order. | No |
VENUE_TRADE_KEY_CHANGED | 403 | The API key’s venue-trading settings changed since the request was admitted. | Retry so the request is admitted under the key’s current settings. | No |
VENUE_TRADE_KEY_DISABLED | 403 | The API key’s venue-trading switch is off. | Turn on venue trading for the key. | No |
VENUE_TRADE_KEY_NOT_CURRENT | 403 | The API key is revoked or expired, or is no longer current for this workspace. Nothing was placed. | Use a current venue-trading key, or create a new one. | No |
VENUE_TRADE_KEY_SIGNING_REQUIRED | 409 | Request signing cannot be turned off on a key that can trade venues: venue trading accepts only signed requests. The key and its secret are unchanged. | Keep signing on, or use a key without venue trading for unsigned requests. | No |
VENUE_TRADE_KEY_UNAVAILABLE | 503 | The API key’s venue-trading settings could not be read. | Retry the same request shortly, with backoff. | Yes |
VENUE_TRADE_PAYOUT_DESTINATION_CHANGED | 409 | The payout destination changed after the trade was prepared. | Prepare the trade again. | No |
VENUE_TRADE_PAYOUT_FEE_INVALID | 422 | The payout fee is not valid for the venue’s precision. | Request a new quote. | No |
VENUE_TRADE_RECONFIRMATION_REQUIRED | 409 | This confirmation placed no order; the trade needs a fresh quote accepted. | Request a fresh quote and accept it. | No |
VENUE_TRADE_REVIEW_EXPIRED | 409 | The trade’s review expired; nothing was sent. | Prepare the trade again for a new review. | No |
VENUE_TRADE_REVIEW_PENDING | 409 | The trade waits for a human approval on its venue trade review; nothing was sent. | Wait for a human member to approve the review, then confirm again. | No |
VENUE_TRADE_REVIEW_REJECTED | 409 | The trade’s review was rejected; nothing was sent. | Do not retry; prepare a different trade if needed. | No |
VENUE_TRADE_REVIEW_REQUIRED | 409 | Current policy needs a human review the trade was not prepared with; nothing was sent. | Request a new quote so the trade is prepared for review. | No |
VENUE_TRADE_SCOPE_REQUIRED | 403 | Venue-account trading needs an API key with the workspace_venue_trade scope. | Use a key with workspace_venue_trade, venue trading on and HMAC signing. | No |
VENUE_TRADE_SIGNATURE_REQUIRED | 403 | Venue-account trading with an API key needs HMAC request signing. | Sign the request with X-Timestamp and X-Signature. | No |
VENUE_UNAVAILABLE | 503 | The chosen liquidity provider is temporarily unavailable. | Retry shortly, or choose another quote. | Yes |
VENUE_WORKSPACE_ACCOUNT_REQUIRED | 409 | Deposit instructions require the workspace’s own venue account. | Use a workspace-owned venue account. | No |
WALLET_COMPLIANCE_REVOKED | 403 | A wallet on this quote had its on-chain compliance revoked. | Use another wallet. | No |
WALLET_DEFAULTS_UNAVAILABLE | 503 | The saved default wallets and accounts could not be read. | Retry the same request shortly, with backoff. | Yes |
WALLET_IDENTITY_CONFLICT | 422 | The funding wallet is not ownership-verified for the order’s owner. | Verify the wallet for the owner, or use a verified one. | No |
WALLET_LINKED_TO_DIFFERENT_ACCOUNT | 403 | The signing wallet is linked to a different account. | Sign with a wallet linked to this account. | No |
WALLET_LINK_REQUIRED | 403 | The signing wallet must be linked and verified first. | Link and verify the wallet, then place the order. | No |
WALLET_NOT_LINKED | 422 | The funding wallet is not linked to the order’s owner. | Link the wallet to the owner, or use a linked one. | No |
WALLET_NOT_ON_CHAIN | 400 | The bound wallet or address is not an account on the chain it was bound to. | Bind a wallet registered on that chain. | No |
WALLET_SIGNATURE_REQUIRED | 400 | The order is missing the wallet signature the quote requires. | Sign the quote’s terms in the paying wallet and include the signature. | No |
WEBHOOK_CONFLICT | 409 | The webhook endpoint’s current state does not allow this action; the message names why, for example a paused endpoint. | Reactivate the endpoint or read its current state, then send the request again. | No |
WEBHOOK_DELIVERY_NOT_FOUND | 404 | This webhook endpoint has no delivery with that id. | Use a delivery id from this endpoint’s delivery log. | No |
WEBHOOK_EVENT_RETIRED | 400 | An events entry names a retired webhook event; the message names its replacement. | Subscribe to the replacement event instead. | No |
WEBHOOK_EVENT_UNKNOWN | 400 | An events entry is not a webhook event; details.acceptedKeys lists the events you can subscribe to. | Subscribe only to events listed in details.acceptedKeys. | No |
WEBHOOK_EXISTS | 409 | This workspace already has a webhook endpoint for that URL. | Use the existing endpoint, or register a different URL. | No |
WEBHOOK_NOT_FOUND | 404 | This workspace has no webhook endpoint with that id. | Use an id from this workspace’s webhook list. | No |
WEBHOOK_PRINCIPAL_UNRESOLVED | 403 | This credential cannot be recorded as the webhook’s accountable principal. | Register the webhook with a member session, a member’s API key or a service account of this workspace. | No |
WEBHOOK_REDELIVERY_NOT_AVAILABLE | 409 | This delivery offers no redelivery (its redeliverAvailable is false): it was withheld because the endpoint’s principal may not read that activity; reason names the recorded outcome. Nothing was queued. | Grant the endpoint’s principal the permission the event needs; later events are delivered, this one is not resent. | No |
WEBHOOK_REDELIVERY_REFUSED | 409 | This delivery cannot be sent again now: the endpoint is paused, the delivery is still pending or already being redelivered, or its payload is not retained. | Read the delivery and the endpoint; reactivate a paused endpoint or wait for the pending attempt, then retry. | No |
WITHDRAWAL_CHAIN_UNSUPPORTED | 409 | The venue has no withdrawal network for that chain. A quote source answers unavailable with it; an order or requote on that source is refused. | Deliver on a chain the venue withdraws to. | No |
WITHDRAWAL_FEE_EXCEEDS_AMOUNT | 409 | The venue’s withdrawal fee is larger than the amount received. A quote source answers unavailable with it; an order or requote on that source is refused. | Use a larger amount. | No |
WITHDRAWAL_FEE_UNVERIFIED | 409 | The venue’s withdrawal fee could not be read, so the minimum receive cannot be set. | Request a new quote, then place the order on it. | No |
WORKFLOW_UNAVAILABLE | 503 | The workspace’s compliance workflow could not be read; the order was not admitted. | Retry the same request shortly, with backoff. | Yes |
WORKSPACE_COMPLIANCE_POLICY_UNAVAILABLE | 503 | The workspace compliance policy could not be confirmed current, so the order was not admitted. | Retry the same request shortly, with backoff. | Yes |
WORKSPACE_CONTEXT_REQUIRED | 400 | A workspace context is required to act on this order. | Send the request with the workspace’s credential. | No |
WORKSPACE_INVALID | 403 | The credential’s workspace id is invalid. | Check the key’s workspace. | No |
WORKSPACE_NOT_ACTIVE | 403 | The workspace is not active. | Complete or restore the workspace, then retry. | No |
WORKSPACE_NOT_FOUND | 404 | The path workspace is unknown or is not the authenticated workspace; both have the same response. | Use your authenticated workspace id in the path. | No |
WORKSPACE_POLICY_UNAVAILABLE | 503 | The workspace’s trading policy could not be read. | Retry the same request shortly, with backoff. | Yes |
WORKSPACE_REQUIRED | 400 | This action needs an authenticated workspace context. | Send the request with a workspace credential. | No |
WORKSPACE_SCOPE_MISMATCH | 403 | The header or other workspace scope selector is not available to this credential or session. | Use a workspace the session belongs to and the credential is bound to. | No |
WORKSPACE_SLIPPAGE_LIMIT_EXCEEDED | 403 | The quote’s slippage is above the workspace’s limit. | Choose a quote within the limit, or ask an admin to change it. | No |