Rebalances
Move native USDC between the treasury's chains via CCTP (treasury-only)
POST
/v1/rebalancesBurns 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_idinteger(required)to_chain_idinteger(required)amountstring(required)
Responses
201Planned rebalance
idstring(required)from_chain_idinteger(required)to_chain_idinteger(required)amountstring(required)status"planned" | "executing" | "filled" | "cancelled" | "aborted"(required)phasestring,null(required)burn_txstring,null(required)mint_txstring,null(required)created_atobject(required)updated_atobject(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}/completePolls 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
idin path,string(required)
Responses
200Minted
idstring(required)from_chain_idinteger(required)to_chain_idinteger(required)amountstring(required)status"planned" | "executing" | "filled" | "cancelled" | "aborted"(required)phasestring,null(required)burn_txstring,null(required)mint_txstring,null(required)created_atobject(required)updated_atobject(required)
202Attestation not ready yet — try again shortly
idstring(required)from_chain_idinteger(required)to_chain_idinteger(required)amountstring(required)status"planned" | "executing" | "filled" | "cancelled" | "aborted"(required)phasestring,null(required)burn_txstring,null(required)mint_txstring,null(required)created_atobject(required)updated_atobject(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
idin path,string(required)
Responses
200The rebalance
idstring(required)from_chain_idinteger(required)to_chain_idinteger(required)amountstring(required)status"planned" | "executing" | "filled" | "cancelled" | "aborted"(required)phasestring,null(required)burn_txstring,null(required)mint_txstring,null(required)created_atobject(required)updated_atobject(required)
404Unknown rebalance
Example
curl -X GET https://api.cofferline.com/v1/rebalances/{id} \
-H "authorization: Bearer $TOKEN"