API · 4 of 5
Transfers
The exact calls a wallet signs to move value, then the transfer followed until it lands. Nothing here signs or sends.
THE COORDINATION LAYER · one namespace at https://coord.taifoon.dev/v1 · 5 operations on this page · machine-readable at /v1/openapi.json (see Reference)
Try it
A transfer is quote, plan, sign, attest, mint and prove. Nothing on this page signs: your wallet signs, Circle mints, the chain proves.
Plan
Plan 2 USDC from Base to Arc. The answer is the quote and the transactions in one object: the same numbers the wallet signs.
curl -X POST https://coord.taifoon.dev/v1/transfer/plan \
-H 'content-type: application/json' \
-d '{"src_chain_id":8453,"dst_chain_id":5042,"amount":"2000000",
"recipient":"0x3574999dd4c96eb73bd6e11d4177010c83e14f5b","speed":"standard"}'| Field | Meaning |
|---|---|
steps[] | approve (skip it if the allowance suffices), then bridge: to, data, value, chain_id. |
amounts_usdc_units | amount, service_fee and its reason (bps or floor), burned, circle_max_fee, circle_fee_estimate and expected_received. |
fees | The service fee, Circle’s bps and forwarder fee, and the source of each number. |
route.via | The CCTP fee router on chains that have one, or token_messenger_v2_direct_forwarded. |
| Leg | Who takes it |
|---|---|
| Service fee | The router, on chain: the larger of 10 bps and a 0.02 USDC floor. |
| Burned | The amount less the service fee, handed to Circle’s TokenMessengerV2. |
| Circle fee | Circle’s bps tier plus its forwarder fee, taken from the burned amount. |
| Arrives | Native USDC minted to the recipient by Circle’s forwarder. |
Circle's forwarder mints only a burn that carries its hook and whose maxFee covers its fee. The plan sizes maxFee from Circle's live numbers.
Sign
Your wallet sends the steps in order on the source chain. The router takes the fee and calls depositForBurnWithHook: one transaction, one Bridged event. A smart-account wallet (EIP-5792) can batch the approve and the bridge.
Follow it
Follow a transfer by its source transaction (here a transfer from Base that was minted), or read the recent transfers:
curl https://coord.taifoon.dev/v1/transfer/8453/0x81464f5e6a8b6322e4bec8f609a08e8ec1f1ef11d39e5f5d51e3fa676c5f042a
curl "https://coord.taifoon.dev/v1/transfers?limit=3"The bridge gateway answers the same state machine directly, with more views:
| Call on https://arc.taifoon.dev | Gives you |
|---|---|
POST /v1/bridge/track | Registers any send ({ chain_id, tx_hash }); router burns are also found on chain within a minute. |
GET /v1/bridge/tx/:chain/:hash | The state (burned → attested → minted, needs_relay, stuck with a resolution), the timeline and the mint transaction. |
GET /v1/bridge/status/:chain/:hash | Circle's attestation, with forward_state. |
GET /v1/bridge/relay-plan/:chain/:hash | The fallback: once attested, the receiveMessage call any funded address may send. |
GET /v1/bridge/queue | Every unresolved transfer, oldest first, with what happens next. |
GET /v1/bridge/ledger | Records and a summary: volume, fees, measured burn-to-mint times per tier. |
GET /v1/bridge/events/:chain | The router's Bridged logs, decoded from the chain. |
GET /v1/bridge/metrics | Prometheus metrics: states, unresolved, SLA breaches, volume, durations. |
curl https://arc.taifoon.dev/v1/bridge/tx/8453/0x81464f5e6a8b6322e4bec8f609a08e8ec1f1ef11d39e5f5d51e3fa676c5f042a
curl https://arc.taifoon.dev/v1/bridge/queueProve it
The burn and the mint are transactions like any other: prove each with GET /v1/proof/tx/:chain/:tx (see Prove a transaction).
Every operation (5)
Each row is generated from the table that routes /v1. The answer of each operation, field by field, is in the OpenAPI document; see Reference.
| Operation | What it does | Auth |
|---|---|---|
POST /v1/transfer/plan | The exact calls a wallet must sign to make a transfer. | none |
POST /v1/bridge/plan | The same call as POST /v1/transfer/plan, under the planner’s own name. | none |
GET /v1/transfer/:chain/:tx | Where one transfer has got to. | none |
GET /v1/transfers | The transfers the service has seen. | none |
GET /v1/transfer/watch/:chain/:tx | Follow one transfer as it moves. | none |
