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:JavaScript
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:1
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
2
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)
3
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.
4
Verify API connectivity
Test that you can reach the API:If this fails, check your network connectivity and firewall settings.
Shell