Before you start: the OMS API is in early access. Every endpoint, including the ones in this guide, requires an early-access API key. Request access before you begin.
How it works
Send payments to a list of recipients from a central platform wallet. OMS converts USDC from your treasury to each recipient’s local currency and delivers via ACH, wire, or SWIFT. This pattern covers payroll, contractor payments, marketplace settlements, and any flow where you control the source funds. Each payout is a single quote and transaction. The source side is your platform customer’s OMS wallet; the destination side is an external account (anext_bankUs_, ext_bankIban_, or ext_bankCa_ bank account) referenced by its ID in the quote. Every transaction is owned by your platform customerId, and OMS records each side’s identity on the transaction’s party object. To reconcile a run, filter GET /transactions?customerId=....
Register each recipient once before their first payout. Create a counterparty with POST /counterparties (customerId and name, plus optional contact and address details), then register their bank account with POST /external-accounts, setting owner to { "kind": "counterparty", "counterpartyId": ... } and supplying the bank detail object that matches type. The account starts pending and becomes active once provisioning succeeds; quote against its ext_ ID from then on.
What is available today
The per-recipient mechanics are part of the canonical API. Register each recipient as a counterparty withPOST /counterparties and their bank account with POST /external-accounts (owner kind counterparty). For each recipient you then create a POST /quotes with your treasury wallet as the source and the recipient’s bank as the destination (bankUs, bankIban, or bankCanada, referenced by its ext_ ID), then execute it with POST /transactions referencing the quote by quoteId. ACH, achSameDay, wire, RTP, and SWIFT (IBAN) rails are selected with the destination’s network. Use a deterministic Idempotency-Key on each request for safe retries, attach metadata for reconciliation, and track each payout through the transaction.cryptoToFiat.processing, transaction.cryptoToFiat.completed, and transaction.cryptoToFiat.failed events. Scope a run with GET /transactions?customerId=....
Bulk payouts are enabled per project through early access; contact us before you build against them.
Planned capabilities
- Batch endpoints for parallel quote creation and transaction execution across all recipients
Bulk payouts are under active development and available through early access. Contact us to enable it for your project.
Register interest
Share your use case and we’ll reach out when bulk payouts are available.