Create an orchestration address
Create a persistent on-chain wallet that automatically offramps any stablecoin deposit to a USD bank account.
The endpoint provisions the escrow wallet synchronously, so the response
typically already carries status=ACTIVE and a populated address. If
the provider call is mid-flight, status=PENDING_WALLET and address=null
— retry the same call (same requestId) to drive provisioning forward.
Idempotency. Repeating the same requestId with an identical payload
returns the existing record (200). Repeating it with a different payload
returns 409 RESOURCE_CONFLICT indicating which field differs (e.g.
requestId already used with a different source.chain).
Mode rules:
PER_DEPOSIT— each deposit is batched into its own offramp immediately, unless it’s below the destination rail’s offramp minimum, in which case it’s heldPENDINGuntil the cumulative pending reaches the minimum, then batched together.SCHEDULED— deposits accumulate until the nextHOURLY/DAILY/WEEKLYtick.THRESHOLD— deposits accumulate untilthresholdAmountis reached.
Source & minimums. source.currency must be supported on source.chain
(e.g. USDT on TRON, USDC on Base/Polygon/Ethereum/Solana) — unsupported pairs
like USDC on TRON return 400. Each rail also has a minimum offramp amount
(e.g. ≥ 5 for SWIFT, ≥ 1 for wire/ACH/RTP; USDT ≥ 10); THRESHOLD’s
thresholdAmount must meet it.
See the schema description on CreateOrchestrationAddress for the exact
field-combination rules.
Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Path Parameters
ID of the user
Query Parameters
Optional profile (client/organization) scope. When omitted the request is
scoped to the caller's default profile. Used by requestId idempotency:
addresses are unique per (profileId, requestId).
Body
Provisions a new persistent on-chain address that automatically offramps any stablecoin it receives.
Mode rules (cross-field):
mode=PER_DEPOSIT— must NOT includescheduleorthresholdAmount.mode=SCHEDULED— MUST includeschedule.interval; must NOT includethresholdAmount.schedule.nextRunAtis optional.mode=THRESHOLD— MUST includethresholdAmount; must NOT includeschedule.
Source rules: source.currency must be supported on source.chain (e.g. USDT on TRON, USDC on Base/Polygon/Ethereum/Solana). Unsupported pairs like USDC on TRON are rejected with 400.
Offramp minimums: each destination rail has a minimum offramp amount (e.g. ≥ 5 for SWIFT, ≥ 1 for wire/ACH/RTP; USDT carries a ≥ 10 floor). mode=THRESHOLD requires thresholdAmount to meet that minimum, and a batch is only ever created once the pending deposits reach it — deposits below the minimum are held PENDING to accumulate.
Idempotency: requestId is the client-supplied idempotency key. Repeating the same requestId with the same payload returns the existing record (200). Repeating with a different payload returns 409 RESOURCE_CONFLICT indicating which field differs (e.g. requestId already used with a different source.currency).
Wallet provisioning: the response is returned synchronously after the escrow wallet is provisioned, so status=ACTIVE and address is non-null in the typical case. If the provider call is in flight, status=PENDING_WALLET and address=null — retry the same call (same requestId) to drive provisioning forward.
Client-supplied idempotency key (UUID v4 recommended). Unique per (profileId, requestId).
The on-chain source the orchestration address accepts deposits in. A stablecoin
contract must exist for the (currency, chain) pair — USDC and USDT are both
supported on Base/Polygon/Ethereum/Solana, while TRON supports USDT only.
Unsupported pairs (e.g. USDC on TRON) are rejected at create time with 400.
The destination payout configuration. v1 ships USD only, via an existing offramp account.
Determines when deposits are converted into an offramp.
PER_DEPOSIT— each deposit is batched into its own offramp immediately, UNLESS the cumulativePENDINGamount is below the destination rail's offramp minimum, in which case the deposit is heldPENDINGand all pending deposits are batched together once their cumulative amount reaches the minimum.SCHEDULED— deposits accumulate until the next schedule boundary (HOURLY/DAILY/WEEKLY), then the entire pending pool is batched together (only if it meets the offramp minimum; otherwise it rolls into the next tick).THRESHOLD— deposits accumulate until their summed amount reachesthresholdAmount, then the entire pending pool is batched.
PER_DEPOSIT, SCHEDULED, THRESHOLD Required when mode=SCHEDULED. Forbidden otherwise.
Required when mode=THRESHOLD. Forbidden otherwise. Decimal amount in
the address's source currency (e.g. "100.00"). Must be at least the
destination rail's offramp minimum (e.g. ≥ 5 for SWIFT, ≥ 1 for
wire/ACH/RTP; USDT ≥ 10), else 400. Aggregate pending deposits are
summed in integer token units (BigInt) and compared to this value, so
floating-point drift never blocks the threshold.
"100.00"
Response
A single orchestration address record.
An orchestration address record.
Unique orchestration address ID.
ID of the user that owns this orchestration address.
The on-chain wallet address that accepts deposits. null while
status=PENDING_WALLET (provisioning in flight); populated once the
wallet exists.
"0xAbC0123456789AbCdEf0123456789AbCdEf01234"
Source token + chain the address accepts.
Destination payout configuration.
Determines when deposits are converted into an offramp.
PER_DEPOSIT— each deposit is batched into its own offramp immediately, UNLESS the cumulativePENDINGamount is below the destination rail's offramp minimum, in which case the deposit is heldPENDINGand all pending deposits are batched together once their cumulative amount reaches the minimum.SCHEDULED— deposits accumulate until the next schedule boundary (HOURLY/DAILY/WEEKLY), then the entire pending pool is batched together (only if it meets the offramp minimum; otherwise it rolls into the next tick).THRESHOLD— deposits accumulate until their summed amount reachesthresholdAmount, then the entire pending pool is batched.
PER_DEPOSIT, SCHEDULED, THRESHOLD Populated only when mode=SCHEDULED; null otherwise.
Populated only when mode=THRESHOLD; null otherwise. Decimal amount
in the source currency.
"100.00"
Lifecycle status of the orchestration address.
PENDING_WALLET— created but the escrow wallet is still being provisioned. The on-chainaddressis null. Typically transient (a few seconds).ACTIVE— wallet provisioned, ready to receive deposits.DEACTIVATED— soft-deleted. The on-chain wallet still exists and can receive funds, but incoming deposits are recorded withstatus=IGNOREDand never offramped.
PENDING_WALLET, ACTIVE, DEACTIVATED ISO 8601 timestamp when the address was deactivated. null if still active.
The escrow wallet's live on-chain balance of the source token. Present
ONLY on the single-address GET (GET /orchestration-addresses/{id}); the
list endpoint omits it to avoid a provider call per row. null if the
wallet isn't provisioned yet or the balance lookup failed — the GET still
returns 200.
{
"currency": "usdc",
"amount": "100.500000"
}