Create a customer
Creation can outlast the request. When it does, the response is 202 with the id the customer will have, and the customer reads as 404 until creation finishes. Repeat the same request with the same Idempotency-Key to follow it: the repeat answers 202 while creation is still running and 201 with the customer once it is done.
Authorizations
Token from POST /auth/token
Headers
Client-supplied request key. Required on all non-auth POST requests.
256Body
Create a new customer. Individuals require firstName and lastName. Businesses require companyLegalName and email, and do not accept person-name fields. PII fields (birthDate, residentialAddress, ipAddress, identifyingInformation) are write-only and never returned in responses. Whether identity verification is required, and whether OMS relies on your attestation or a vendor verifies, is configured per project, not per request.
Customer type. Individuals follow the project's KYC policy, businesses its KYB policy.
individual, business "individual"
Legal business name. Required for business creation; supports Unicode and punctuation. Only valid for business customers.
255Individual customer's legal first name. Not accepted for business customers.
"Jane"
Individual customer's middle name. Not accepted for business customers.
Individual customer's legal last name. Not accepted for business customers.
"Smith"
"jane@example.com"
Primary phone in E.164 format.
"+12125551234"
Date of birth in YYYY-MM-DD format. Write-only.
"1990-05-15"
ISO 3166-1 alpha-2 country code.
"US"
End-user's IP address. Used for geo-based compliance checks on the basic endorsement. Write-only.
Developer's own user ID for cross-referencing.
"usr_12345"
Whether the customer has accepted OMS terms of service. Default false.
Customer's residential address. Write-only.
Array of ID documents. Write-only. Supported types: ssn, itin, driversLicense, passport.
Endorsements to request: basic, cryptoCustody, usd. If omitted, OMS defaults to cryptoCustody and usd (which auto-includes basic).
basic, cryptoCustody, usd Response
Customer created
Customer response object. PII fields (birthDate, residentialAddress, ipAddress, identifyingInformation) are write-only — accepted in POST/PATCH but never returned in responses.
"cst_01H9Xa8F5dN6mP3q"
Customer type. Individuals are subject to the project's KYC policy, businesses to its KYB policy.
individual, business "individual"
An individual's first, middle and last names joined by spaces, or a business's legal name. Left out when the customer has no name.
"Jane Smith"
"Jane"
null
"Smith"
"jane@example.com"
Primary phone in E.164 format.
"+12125551234"
ISO 3166-1 alpha-2 country code.
"US"
Developer's own user ID for cross-referencing.
"usr_12345"
Where the customer is in onboarding. actionRequired carries a hold saying what to do, and rejected carries a failure. offboarded is a deleted or deactivated customer.
pending, actionRequired, active, rejected, offboarded "active"
What you must do for a customer in actionRequired.
Why a customer or an endorsement was rejected.
Whether the customer has accepted OMS terms of service.
true
Timestamp when signedAgreement was set to true. Null if not yet signed.
"2026-03-20T14:15:22Z"
USD rollup of a customer's balances. Returned on GET /customers/{id} only — never on list, create, or update. Covers fiat wallets and custodial crypto wallets; noncustodial wallets are not yet valued, so a customer holding one reads an undercount here. Omitted entirely when the rollup cannot be read; a partial total is never returned, so treat an absent field as "unknown", not as zero.
Simplified flat view: one entry per wallet-asset combination. Use GET /wallets/{id} for the full representation.
What the customer is endorsed for. An endorsement never reads further along than its customer, and one that was not requested is left out.