Skip to main content

Transaction states

You can cancel a transaction in INITIATED, QUEUED, or SENT. You can accelerate a transaction in SENT or STUCK.
CONFIRMED may be omitted or arrive out of order. Instant-finality blockchains such as Arc skip it entirely (SENTCOMPLETE); on other blockchains, webhook delivery isn’t ordered, so CONFIRMED may arrive after COMPLETE or not at all. Treat both as inclusion signals.

Transaction lifecycle

Challenge states

Challenges are the user approval flow for user-controlled wallets. A challenge in FAILED has errorCode and errorMessage fields describing the failure. See Wallets API error codes for the errorCode values.

Challenge lifecycle

Transaction errors

When a transaction enters FAILED, errorReason categorizes the cause and errorDetails (when present) provides the specific message. For the numeric error codes returned in API responses, see Wallets API error codes.

Estimation error details

When a transaction fails with ESTIMATION_ERROR, errorDetails provides the specific reason.

Insufficient balance

The wallet or contract doesn’t have enough tokens to complete the transaction.

Blocklist and access control

An account is restricted from performing the requested action.
Tokens sent to their own contract address are permanently locked and can’t be recovered. Circle keeps the USDC contract address on its denylist to block this common mistake.

Allowance and approval

Token spending approvals are missing or insufficient.

Signature and authentication

The cryptographic signature is invalid or expired.

Smart account (ERC-4337)

Account abstraction wallets have specific failure modes.

Invalid parameters

Transaction parameters are incorrect.

Timeout and execution

Generic errors during transaction execution.

Troubleshooting failed transactions

If the cause of the failure isn’t obvious from errorReason or errorDetails, work through these checks:
  • Verify contract addresses. Confirm the correct contract on the correct blockchain.
  • Verify transaction parameters. Recipient addresses are valid and non-zero, token amounts meet minimums, and ABI signatures match the function being called.
  • Check balances and allowances. The wallet has enough of the token being transferred; for ERC-20 spending, the contract has enough allowance from approve().
  • Review contract state. The contract isn’t paused, and role-based access requirements are satisfied.
  • Verify authorization. The calling wallet has the roles required by the contract. Check blocklist status when working with regulated tokens such as USDC.
  • Retry time-sensitive operations. Regenerate expired signatures or nonces. Retry after a short delay if the error suggests the RPC node was temporarily unavailable.
For complex reverts where errorDetails doesn’t provide enough information, simulate the failing transaction in Tenderly to step through execution and identify where and why it reverts.