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.
Architecture
Prerequisites
- An OMS API key.
- Webhook subscriptions configured for
customer.endorsement.*events in the OMS Dashboard.
Step 1: Create a customer
Register the end user with aPOST /customers call. OMS creates the record and returns an ID.
Request
type must be individual. Only the individual customer type is supported in the v0.9 API. All other fields are optional but needed before endorsements can be granted.
externalId is the recommended way to link the OMS customer record to your internal user ID. Pass it at creation to avoid a separate update call later.
Response, 201 Created
endorsements array is empty at creation. No money movement is possible until endorsements are granted.
Step 2: Collect identity and get endorsements
OMS uses an endorsement model to gate access to financial operations. The three endorsements are:| Endorsement | Unlocks |
|---|---|
basic | Standard operations. Required for all transactions. |
cryptoCustody | Crypto custody and advanced wallet features. |
usd | USD stablecoin operations, including virtual accounts. |
Webhook: customer.endorsement.granted
endorsements in this payload to confirm which operations are now available for the customer.
Step 3: Provision a wallet
Once the customer has at least thecryptoCustody endorsement, create a custodial wallet. OMS derives the onchain address and manages the keys.
Request
asset and chain the wallet will hold.
Response, 201 Created
address is the onchain address where deposits for this customer will be received. Store the wlt_ ID, you will use it as the source or destination in quotes.
Step 4: Add an external bank account (optional)
External bank account and card registration is not yet available in the OMS API. To be notified when it launches, register your interest.
Register interest
Share your use case and we’ll reach out when external bank account and card registration is available.
GET /external-accounts/schemas) and the registration call (POST /customers/{id}/external-accounts) are not yet available in the OMS API.
If the customer will receive fiat payouts, register their bank account as an external account. Use GET /external-accounts/schemas to get the required fields for the target country and currency.
Get the schema
country and currency as optional query params. The response describes which fields each supported rail requires. Render those fields as a form and collect the data from the customer.
Register the account
bankDetails and are validated against the response from GET /external-accounts/schemas. The network value (ach, wire, swift, etc.) declares the rail.
cpUsBank_ ID identifies the bank account for use elsewhere in OMS.
What’s next
With a customer, wallet, and optional external account in place, you can:- Fund the wallet with a cash-in at a retail location.
- Set up a virtual account to accept recurring ACH deposits (early access).
- Create a deposit address to receive crypto from external wallets (early access).
- Send funds out of the wallet with the send guide: crypto destinations today, bank payouts in early access.