Why rebalance
Each venue settles in a specific chain and token. When the venue you are trading on lives on a different chain than where your funds are currently resting, submitting an order blocks synchronously on a cross-chain bridge — typically a couple of minutes, with a hard cap of ten. Every order placed on the “wrong” chain pays that latency. A rebalance moves the bridge off the order path. You tell the aggregator how much to move from one venue to another; it does the conversions and bridge once. Later orders on the destination venue fire immediately because their collateral is already in the venue’s spendable form. Rebalancing is optional. The inline bridge stays as the fallback — if you submit an order against an under-funded venue, the aggregator will still route the funds for you. Use a rebalance when you know which venue you are about to trade on and want the first order to be fast.Per-venue resting forms
Each venue resolves to a specific chain and token that its books settle in. A rebalance debits the source venue’s resting form and lands the amount in the destination venue’s resting form:sourceVenue and destinationVenue must differ. A rebalance only moves a
venue’s own spendable form — loose USDC sitting on a chain that isn’t yet
in a venue’s resting form is not a valid source.
Submit a rebalance
Submit a request with POST /v1/rebalances.rebalanceId — the handle you
use for status lookups. The Idempotency-Key you sent is echoed back in the
Idempotency-Key response header.
amountis the amount that must land at the destination, in USDC, up to six decimal places. It must be greater than zero. The aggregator grosses up the source debit to cover bridge and swap slippage so the destination receives at leastamount.sourceVenueis debited anddestinationVenueis credited. They must be different venues.maxSlippageBpsis optional. It caps slippage on the lossy swap and bridge steps; if omitted, the aggregator applies a server-side default.
Idempotency
Pass anIdempotency-Key request header. Re-submitting the same key with the
same body returns the existing rebalance instead of starting a new one — safe
to retry on network errors or process restarts. Pick something stable per
logical request (for example, rb-2026-06-07-001).
A few rules to keep in mind:
- The header is required; a request without it is rejected with
400. - The key is unique per customer. Two different customers can use the same
Idempotency-Keywithout conflict. - Re-submitting the same key with a different body is rejected with
422. Pick a new key when the source, destination, or amount changes.
Poll the rebalance
Fetch the latest state with GET /v1/rebalances/{rebalanceId}.Rebalance resource carries the move and its lifecycle state. The
Idempotency-Key is returned as a response header, not in the body:
status reaches a terminal state. A one- to two-second interval is
usually enough; updatedAt advances on every state change.
To page through past rebalances, use
GET /v1/rebalances, which returns
the most-recently-active first.
Lifecycle
Every rebalance moves through a four-state lifecycle.
A
failed rebalance is fail-closed: the aggregator did not partially move your
funds. Your funds stay available and you can submit a new rebalance (with a
fresh Idempotency-Key) or fall back to submitting the order directly.
Failure reasons
Whenstatus is failed, error is an object with a machine-readable code
and a human-readable message; it is null otherwise.