ExchainDocs
DocsAPI

APIErrors and codes

Errors and codes

Every refusal code and HTTP error, with what to do.

Look up any refusal code or HTTP error and what to do about it. Refusals are HTTP 409 with one of 17 codes; other errors use { error, detail }.

Refusal codes

Member-level codes appear in members[i].denied with top-level denied: "member_denied". Batch-level codes appear in the top-level denied, with every member not_evaluated.

CodeLevelTriggerExtra fieldsRetry and action
per_tx_capMemberOne purchase above perTxCapbound, used, attemptedNever at this amount. Drop or split the purchase
hourly_outflowMemberRolling 1 h total exceeded. Custom mandates onlybound, used, attempted, retryAfterSec, windowResetsAtAt windowResetsAt
daily_outflowMemberRolling 24 h total exceededbound, used, attempted, retryAfterSec, windowResetsAtAt windowResetsAt
monthly_outflowMemberRolling 30-day total exceeded. Custom mandates onlybound, used, attempted, retryAfterSec, windowResetsAtAt windowResetsAt
per_seller_capMember24 h total to this counterparty exceededbound, used, attempted, retryAfterSec, scopeAt reset, or pay another seller
velocity_burstMemberMore than burstPerMinute purchases in 60 sbound, used, attempted, retryAfterSecAfter retryAfterSec
per_agent_capMember24 h total for this agentIdentifier (Cardano) or agent address (EVM)bound, used, attempted, retryAfterSec, windowResetsAt, scopeAt windowResetsAt
envelope_exhaustedMemberLifetime envelope spentbound, used, attemptedNever. Register a new wallet with a larger envelope
registry_gateMemberCardano: agentIdentifier is not a live Masumi registry NFT, the registry is unreachable, or the Fixed price is unreadable. x402: no signed offer and unsigned sellers refusedreasonEnglishNever. The seller registers or signs an offer. If the registry was unreachable, retry later
price_above_publishedMemberAbove the registry Fixed price plus tolerance, or above the seller's signed x402 offerbound, used, attemptedNever at this amount. Pay at most the published price
counterparty_blockedMemberOn sellerDenyList, or not on a non-empty sellerAllowListreasonEnglishNever. The lists change only with a new wallet
asset_not_listedBatchAn asset the mandate does not govern (EVM: intent.asset is not one of the Safe's governed assets), an asset disabled on the network (asset_disabled), or more than 6 ADA on a token outputreasonEnglish, detailNever. Fix the body
body_mismatchBatch, alarm (member on x402 seller binding)The body disagrees with the intents or is malformed. EVM: the typed data disagrees with intent, uses a method the route refuses, reuses a nonce, or a SafeTx is not at the Safe's current noncereasonEnglish, detailNever. Investigate the builder
payee_unpinnedBatch, alarm (member on x402 seller binding)An output pays an address other than escrow, an agent key or the wallet; x402 seller not boundreasonEnglishNever. Investigate
utxo_unknownBatchWallet not registered to this node, stale walletUtxoRef (stale_ref), or a Hydra head or snapshot problemreasonEnglish, detailRebuild on the current UTxO, or register the wallet
clock_skewBatch, alarmValidity interval missing, unbounded, wider than 7,200 slots, or not open nowreasonEnglishNever. Investigate, then rebuild with a current window of 2 h at most
reservation_conflictBatchAnother batch's hold is open on this walletreasonEnglishAs soon as the hold clears (at most 120 s)

Alarm codes set alarm: true and page Exchain's on-call engineer.

Common details

detailCodeMeaning
stale_refutxo_unknownwalletUtxoRef is not the wallet's current UTxO
asset_disabledasset_not_listedExchain disabled this asset on the network
lovelace_riderasset_not_listedA token output carries more than 6 ADA
unclaimed_outflowbody_mismatchFee or unclaimed ADA above 10 ADA, or outflow not claimed by an intent
quorum_incompletebody_mismatchrequired_signers misses a quorum key
agent_unsignedbody_mismatchrequired_signers misses the agent
not_openclock_skewThe validity window is not open on Exchain's clock
too_wideclock_skewThe validity window is wider than 7,200 slots
nonce_reusedbody_mismatchEVM: a different authorization reuses this nonce
methodbody_mismatchEVM: Permit2 on POST /v1/evm/cosign, a SafeTx on POST /v1/x402/cosign or for a token with EIP-3009, or a SafeTx from a shadow wallet
safe_noncebody_mismatchEVM: the SafeTx nonce is not the Safe's current nonce
payee, amount, window, domain, token, …body_mismatchEVM: the typed-data field that disagrees with intent or the rules
snapshot_staleutxo_unknownHydra: snapshot number below the highest accepted
hydra_head_untrustedutxo_unknownHydra: the head is not trusted for this wallet or node

HTTP errors

StatuserrorRoutesMeaning
400bad_requestAllSchema, JSON or parameter failure. detail names the field
400idempotency_key_mismatchCo-sign, EVM co-sign, x402 co-signHeader differs from batchId
400batch_id_mismatchEVM co-sign, x402 co-signbatchId differs from the authorization nonce (for a SafeTx, the Safe nonce)
400clock_rejectedCo-sign, EVM co-sign, x402 co-signExchain's clock check failed. Contact Exchain
400network_mismatchWallets, x402 walletsWrong network or chain
400node_mismatchWallets, x402 walletsnodeId differs from the token's node
400asset_not_allowed, duplicate_asset, asset_mismatchWallets, x402 walletsAsset checks
400chain_mismatchx402 walletsThe governed assets are on different chains; a Safe lives on one chain
400invalid_constitution, unknown_invariantWallets, x402 walletsThe mandate does not compile
400quorum_mismatchWallets, x402Quorum keys or threshold
400owner_signature_required, safe_mismatch, not_deployedx402 walletsSafe consent or setup
400, 409fee_mismatchx402 fees400: Permit2, or the authorization does not move exactly what is due. 409: reused nonce (nonce_reused) or a SafeTx not at the Safe's current nonce (safe_nonce)
401unauthorizedAllMissing or invalid token
401agent_signature_invalidEVM co-sign, x402 co-sign, x402 feesAgent signature does not recover
402fee_dueEVM co-sign, x402 co-signSettle fees first: Fees
403owner_unboundx402 walletsBind the owner in the console
404not_foundAllUnknown route, or not your wallet or decision
409wallet_existsWallets, x402 walletsDifferent body for an existing wallet
409idempotency_conflictEVM co-sign, x402 co-signSame nonce, different content
409fee_not_due, fee_unpayablex402 feesNothing due, or the fee cannot be paid
409A refusal codex402 feesThe enclaves refused to co-sign the fee settlement; detail says why
413payload_too_largeAll, evidenceBody over 64 KiB, or bundle over 50 MB
429rate_limitedRate-limited routes (Limits)With retryAfterSec and Retry-After
500internalAllServer error
502rpc_failedx402 wallets, EVM co-sign, x402 co-sign, x402 fees, boundThe chain could not be read. Nothing was decided; retry
502deploy_failed, fee_settlement_failedx402 wallets, x402 feesSending the Safe deployment or the fee settlement failed
503quorum_unavailableCo-sign, EVM co-sign, x402 co-sign, x402 feesQuorum below threshold, with reachable, threshold, retryAfterSec (x402 fees: a bare error). detail: "stopped": signing paused (on EVM routes without retryAfterSec). detail: "record" (POST /v1/cosign only): audit record not written. Nothing consumed
503unavailableEvery other POSTdetail: "record": the audit record could not be written, so nothing was done. Retry-After: 5
503x402_unavailable, chain_unavailablex402 wallets, x402 fees, boundNo RPC for the chain, or the chain cannot be read
503busyAnyConnection cap reached. Bare {"error":"busy"}, no envelope

Retry rules for POST /v1/cosign: Refusals and retries.

On this page