Skip to main content
API entities, such as transactions and challenges, are processed asynchronously after the initial POST request. As the request is processed, the transaction’s state, or the challenge’s status, will update accordingly. This update can be retrieved either by polling the associated GET endpoint or by subscribing to webhook notifications (recommended).
For more information about managing transactions, see Transaction Rate Limits and Optimizations.

Transaction states

Transactions go through various states after initiation to indicate if they’ve begun processing, are identifiable on the blockchain, complete, failed, or require further action, such as when a transaction becomes STUCK. Specific actions, like canceling or accelerating a transaction, can only be taken when a transaction is in a specific state. Canceling a transaction can only occur when a transaction is in the INITIATED, QUEUED, or SENT states. Accelerating a transaction can only occur when a transaction is in the SENT or STUCK state. If a transaction cannot be successfully completed, it enters the FAILED state and has accompanying errorReason and errorDetails fields that describe the failure. The following table describes the possible states of a transaction:
CONFIRMED may be omitted or arrive out of order. On instant finality blockchains such as Arc, Circle Wallets transitions directly from SENT to COMPLETE, skipping CONFIRMED. On other blockchains, webhook delivery order is not guaranteed, so a CONFIRMED notification may arrive after COMPLETE or be omitted entirely. Design your application to treat both CONFIRMED and COMPLETE as signals that a transaction has been included in a block.

Transaction errors

If a transaction cannot be completed and enters the FAILED state, the transaction object has accompanying errorReason and errorDetails fields that describe the failure.

Challenge states

Challenges go through several statuses to indicate whether they have been presented to the user, completed, and more. If a challenge cannot be successfully completed, it enters the FAILED state and has accompanying errorCode and errorMessage fields that describe the failure.

ESTIMATION_ERROR details

When a transaction fails with ESTIMATION_ERROR, the errorDetails field provides specific information about why the transaction estimation failed. Below are the common errorDetails values grouped by category, along with their causes and recommended remedies.

Insufficient balance errors

These errors occur when the wallet or contract doesn’t have enough tokens to complete the transaction.

Blocklist and access control errors

These errors occur when an account is restricted from performing certain actions.
Common cause: Sending USDC to the USDC contract addressThe USDC contract address itself is intentionally on Circle’s denylist to prevent developers from accidentally sending USDC tokens to the contract address. Tokens sent to a token contract address would be permanently locked and unrecoverable through normal means.

Allowance and approval errors

These errors occur when token spending approvals are missing or insufficient.

Signature and authentication errors

These errors occur when cryptographic signatures are invalid or expired.

Smart account (ERC-4337) errors

These errors occur with smart contract wallets using account abstraction.

Invalid parameters

These errors occur when transaction parameters are incorrect.

Timeout and execution errors

These generic errors can occur during transaction execution. For guidance on diagnosing and resolving failed transactions, see Troubleshoot failed transactions.