Skip to content

Errors ​

Every error has this shape:

json
{
  "error": "0xabc::game::cheat is not in allowedTargets",
  "code": "TARGET_NOT_ALLOWED",
  "details": { "target": "0xabc::game::cheat" }
}

Branch on code. error is the human-readable reason and details, when present, names the offending input. Errors are not wrapped in data.

The tank pays nothing for a rejected transaction. The fee applies only after the sponsor signs and the transaction executes.

400 - the request is malformed ​

CodeFix
EMPTY_TRANSACTION_BYTESSend transactionBytes as a non-empty base64 string.
INVALID_TRANSACTION_BYTESSend the exact bytes from tx.build(). Do not edit or re-encode them.
TRANSACTION_TOO_LARGEThe bytes exceed 128 KB. Split the transaction.
NON_CANONICAL_TRANSACTION_BYTESThe bytes have trailing or non-canonical data. Rebuild with the SDK.
UNSUPPORTED_TRANSACTION_KINDOnly programmable transactions are sponsored.
UNSUPPORTED_EXPIRATIONUse setExpiration({ ValidDuring: {...} }).
EXPIRATION_REQUIREDSet ValidDuring with a maxEpoch.
EXPIRATION_TOO_FARSet maxEpoch to epoch + 1.
GAS_PAYMENT_MUST_BE_EMPTYCall setGasPayment([]). The tank pays from its address balance.
EMPTY_SIGNATURESend userSignature as a non-empty string.
INVALID_SIGNATURE_ENCODINGSend the serialized signature the wallet returned, base64.
UNSUPPORTED_SIGNATURE_SCHEMEUse Ed25519, Secp256k1, Secp256r1, MultiSig, or zkLogin.
INVALID_SIGNATUREThe signature does not match the bytes. Sign the exact bytes you submit.
INVALID_TANK_NAMETank names are 1 to 32 lower-case letters, digits, and hyphens.

402 - the tank cannot pay ​

CodeFix
INSUFFICIENT_TANK_FUNDSTop up the tank. Deposits are credited within a minute.

403 - a security check or a rule said no ​

Security checks protect the tank. They cannot be turned off.

CodeFix
INSUFFICIENT_SCOPEUse an API key with the Sponsor scope.
SENDER_IS_SPONSOR_ADDRESSThe sender is a tank address. Use the user's address as sender.
WITHDRAW_FROM_NOT_SENDERFunds withdrawals must come from the sender, never from the gas owner.
GAS_COIN_ARGUMENTDo not use tx.gas as an argument. The gas coin belongs to the tank.
ADDRESS_ALIAS_CALLCalls to 0x2::address_alias are not sponsored.
ADDRESS_ALIAS_STATE_INPUTThe alias state object 0xa cannot be an input.
TOO_MANY_WITHDRAW_RESERVATIONSUse at most 9 balance withdrawals in one transaction.
GAS_PRICE_TOO_HIGHSet the gas price to at most 5 times config.gasPrice.
BUDGET_EXCEEDS_TANK_MAXSet the budget to at most config.maxGasBudgetMist.

Rule codes name the rule. Fix the transaction or edit the rule in the dashboard.

CodeRule
SENDER_NOT_ALLOWEDallowedSenders
TARGET_NOT_ALLOWEDallowedTargets
RECIPIENT_NOT_ALLOWEDallowedRecipients
RECIPIENT_NOT_STATICallowedRecipients needs a plain address input, not a command result
COIN_TYPE_NOT_ALLOWEDallowedCoinTypes
TRANSFER_LIMIT_EXCEEDEDmaxTransferMistPerCoinType
PUBLISH_NOT_ALLOWEDallowPublish

404 - no such tank ​

CodeFix
TANK_NOT_FOUNDCheck the tank name and that the API key belongs to the tank's project.

409 - the transaction does not match the tank ​

CodeFix
GAS_OWNER_MISMATCHCall setGasOwner(config.sponsorAddress) for the tank you submit to.
TANK_NETWORK_MISMATCHThe tank is on another network than the API key. Use the matching base URL.
TANK_INACTIVEThe tank is paused, frozen, or deleted. Check the dashboard.
CHAIN_ID_MISMATCHSet chain in ValidDuring to config.chainIdentifier.

410 - too late ​

CodeFix
TRANSACTION_EXPIREDThe epoch passed maxEpoch. Re-read the config, rebuild, and sign again.
REPLAYED_DIGESTThis digest was already submitted. Build a new transaction with a new nonce.

422 - the chain says no ​

CodeFix
NOT_YET_VALIDminEpoch is in the future. Use config.epoch.
GAS_PRICE_BELOW_REFERENCESet the gas price to at least config.gasPrice.
SIMULATION_FAILEDThe transaction aborts in simulation. Fix the transaction. Nothing was charged.
SIMULATION_REJECTEDThe node rejected the transaction before execution. Read message.
NODE_REJECTEDThe node rejected the signed transaction. Read message. Nothing was charged.

429 - a cap was reached ​

CodeFix
DAILY_CAP_EXCEEDEDWait for dailyResetsAt or raise dailyCapMist.
SENDER_CAP_EXCEEDEDThis sender reached maxSponsorshipsPerSenderPerDay. Wait for the UTC day.
PLAN_CAP_EXCEEDEDThe free plan allows 10 sponsorships per month per network. Upgrade the plan.
(no code, error is Rate limit exceeded)The plan's request rate limit. Slow down or upgrade. See retryAfter.

503 - try again later ​

CodeFix
SPONSORSHIP_DISABLEDInodra paused sponsorship. config.sponsorshipAvailable is false. Retry later.
CHAIN_UNAVAILABLEInodra cannot reach the network. Rebuild with a new nonce, then retry with backoff.
VALIDATION_FAILEDThe request body did not match the schema. details lists the fields.
SIMULATION_UNAVAILABLESimulation is required by your rules and the node is down. Retry with backoff.

202 is not an error ​

A 202 with "status": "pending" in data means the transaction was sent and Inodra lost the result. Poll GET /v1/gas/transactions/{digest}. See the pending case.

The full-stack Sui data layer.