Understanding attestation timing
After a successful burn transaction, Circle’s Attestation Service (Iris) must:- Observe the burn event on the source blockchain
- Wait for sufficient block confirmations
- Sign the message and make the attestation available through the CCTP API
| Transfer type | Finality threshold | Typical wait time |
|---|---|---|
| Fast Transfer | ≤ 1000 | Seconds to a few minutes |
| Standard Transfer | ≥ 2000 | Varies by blockchain (see Finality and Block Confirmations) |
Why 404 responses are expected
The attestation API returns a 404 response until the attestation service has observed and processed your burn transaction. This is expected and does not indicate an error. The API returns 404 when:- The burn transaction hasn’t reached the required block confirmations
- The attestation service hasn’t yet indexed the transaction
- The transaction hash or domain ID is incorrect
Check attestation status
Query theGET /v2/messages endpoint
to check the current status of your attestation.
The following table explains the possible responses and what to do next:
| Response | Meaning | Action |
|---|---|---|
| 404 | Attestation not yet observed | Continue polling until the attestation is available |
{ "messages": [] } | Transaction found but not processed | Continue polling until the transaction is processed |
{ "status": "pending" } | Awaiting block confirmations | Continue polling until the block confirmations are reached |
{ "status": "complete" } | Attestation ready | Proceed to mint |
Implement effective polling
Poll the attestation API at regular intervals without exceeding rate limits:TypeScript
Avoid rate limiting
The attestation service limits requests to 35 per second. If you exceed this limit, the service blocks all API requests for 5 minutes and returns HTTP 429. Best practices:- Use a poll interval of at least 5 seconds
- Implement exponential back-off for repeated 429 responses
- Don’t poll from multiple clients for the same transaction
Troubleshooting checklist
If your attestation isn’t available after the expected wait time:Verify the burn transaction
Check the source blockchain’s block explorer to confirm:
- The transaction succeeded (not reverted)
- The transaction is included in a mined block
- Sufficient blocks have been confirmed since the transaction
Confirm request parameters
Verify you’re using the correct:
- Source domain ID (see Supported Chains and Domains)
- Transaction hash (full hash, including
0xprefix for EVM chains) - API environment (sandbox vs. production)
Check finality requirements
Standard Transfers require full finality. For some blockchains, this can take
significantly longer than Fast Transfers. Check
Finality and Block Confirmations
for expected times.