Rebalances

Move native USDC between the treasury's chains via CCTP (treasury-only)

POST/v1/rebalances

Burns USDC on the source chain and mints it on the destination via Circle CCTP v2. Treasury-only: the caller must be the executor address, and the amount must fit the policy's rebalance section. The mint completes minutes later once Circle attests the burn.

Request body

  • from_chain_id integer (required)
  • to_chain_id integer (required)
  • amount string (required)

Responses

201Planned rebalance

  • id string (required)
  • from_chain_id integer (required)
  • to_chain_id integer (required)
  • amount string (required)
  • status "planned" | "executing" | "filled" | "cancelled" | "aborted" (required)
  • phase string,null (required)
  • burn_tx string,null (required)
  • mint_tx string,null (required)
  • created_at object (required)
  • updated_at object (required)

403FORBIDDEN — not the treasury executor
404No policy exists for the executor
422POLICY_VIOLATION — corridor or amount outside the rebalance policy
503Executor signer not configured

Example

curl -X POST https://api.cofferline.com/v1/rebalances \
  -H "authorization: Bearer $TOKEN" \
  -H "content-type: application/json" \
  -d '{"from_chain_id":0,"to_chain_id":0,"amount":"…"}'

Attempt the destination mint now (else the hourly cron does it)

POST/v1/rebalances/{id}/complete

Polls Circle's attestation and, if ready, submits the destination mint immediately — the manual/faster path to the same completion the hourly cron performs. Executor-only. 202 means the attestation isn't ready yet; retry shortly.

Parameters

  • id in path, string (required)

Responses

200Minted

  • id string (required)
  • from_chain_id integer (required)
  • to_chain_id integer (required)
  • amount string (required)
  • status "planned" | "executing" | "filled" | "cancelled" | "aborted" (required)
  • phase string,null (required)
  • burn_tx string,null (required)
  • mint_tx string,null (required)
  • created_at object (required)
  • updated_at object (required)

202Attestation not ready yet — try again shortly

  • id string (required)
  • from_chain_id integer (required)
  • to_chain_id integer (required)
  • amount string (required)
  • status "planned" | "executing" | "filled" | "cancelled" | "aborted" (required)
  • phase string,null (required)
  • burn_tx string,null (required)
  • mint_tx string,null (required)
  • created_at object (required)
  • updated_at object (required)

403FORBIDDEN — not the treasury executor
404Unknown rebalance
409Not awaiting attestation

Example

curl -X POST https://api.cofferline.com/v1/rebalances/{id}/complete \
  -H "authorization: Bearer $TOKEN"

Fetch a rebalance

GET/v1/rebalances/{id}

Parameters

  • id in path, string (required)

Responses

200The rebalance

  • id string (required)
  • from_chain_id integer (required)
  • to_chain_id integer (required)
  • amount string (required)
  • status "planned" | "executing" | "filled" | "cancelled" | "aborted" (required)
  • phase string,null (required)
  • burn_tx string,null (required)
  • mint_tx string,null (required)
  • created_at object (required)
  • updated_at object (required)

404Unknown rebalance

Example

curl -X GET https://api.cofferline.com/v1/rebalances/{id} \
  -H "authorization: Bearer $TOKEN"