Ledger and payouts

Your US dollar balance, the ledger behind it, and payouts from it.

In sandbox

These routes work with test money today. Live payouts aren't switched on.

GET /api/treasury

Bearer apk_ · read:treasury

Returns balances (one entry per account, each with Available, Incoming and Held amounts and when they were last read from the bank), snapshot (older summary, kept for compatibility) and the 25 most recent ledger entries.

POST /api/treasury/deposits

Bearer apk_ · write:treasury · Idempotent

Sandbox only: asks the bank's test environment to send you an ACH, FedNow or wire deposit. Nothing is credited by this call: the deposit is credited when the bank reports it settled. Answers 202. Stablecoin deposits answer 422 capability_unavailable.

{
"source": "column_fiat",
"rail": "ach",
"amountUsdCents": 100000
}

Real deposits arrive by bank transfer to your account details.

Recipients

POST /api/treasury/counterparties

Bearer apk_ · write:counterparties · Idempotent

Save a US bank account (routing and account number) or, with kind: "international", a recipient abroad (BIC and IBAN or local account number, plus address). We keep only the last 4 digits of the account number.

GET /api/treasury/counterparties, /api/treasury/counterparties/{id}

Bearer apk_ · read:treasury

Payouts

POST /api/treasury/payouts

Bearer apk_ · write:payouts · Idempotent

Send money to a saved recipient. rail is ach (add sameDay: true for same-day ACH), wire, realtime or intl_wire. Idempotency-Key is required.

{
"rail": "ach",
"counterpartyId": "cp_…",
"amountCents": 25000,
"description": "Invoice 114"
}

The amount is reserved from your balance first, then the payout is sent to the bank once. It's never retried: if the bank doesn't answer, the payout waits as "outcome unknown" until the bank reports it, and the reservation is released after 24 hours if it never does. Payout limits apply per workspace and per key.

For international wires, see Send money abroad by international wire.

GET /api/treasury/payouts, /api/treasury/payouts/{id}

Bearer apk_ · read:treasury

GET /api/treasury/payouts/{id}/tracking

Bearer apk_ · read:treasury

SWIFT tracking for an international wire.

POST /api/treasury/payouts/{id}/release, /cancel

Bearer apk_ · write:payouts

Release or cancel a held US dollar international wire. /recall isn't available yet.

Exchange rates

POST /api/treasury/fx-quotes

Bearer apk_ · write:payouts · Idempotent

A firm rate for an international wire, for an exact amount the recipient gets (before bank deductions). Use its id as quoteId before the lock expires.

GET /api/treasury/fx-rates

Bearer apk_ · read:treasury

Indicative rates, for display only.

The full request and response fields are in the OpenAPI spec.