v1

latestOpenAPI 3.0.32026-07-2650226215.9 KB
Customers

Create a customer

post/customers

Headers

Idempotency-Keystring required

Unique key to prevent duplicate requests. Required on all POST requests.

Request body

type'individual' required

Must be "individual".

firstNamestring

Customer's legal first name.

middleNamestring

Customer's middle name.

lastNamestring

Customer's legal last name.

emailstring email
phonestring

Primary phone in E.164 format.

birthDatestring

Date of birth in YYYY-MM-DD format. Write-only.

nationalitystring

ISO 3166-1 alpha-2 country code.

ipAddressstring

End-user's IP address. Used for geo-based compliance checks on the basic endorsement. Write-only.

externalIdstring

Developer's own user ID for cross-referencing.

signedAgreementboolean

Whether the customer has accepted OMS terms of service. Default false.

endorsementsstring[]

Endorsements to request: basic, cryptoCustody, usd. If omitted, OMS defaults to cryptoCustody and usd (which auto-includes basic).

metadataobject nullable

Example request

{
  "type": "individual",
  "firstName": "Jane",
  "lastName": "Smith",
  "email": "jane@example.com",
  "phone": "+12125551234",
  "birthDate": "1990-05-15",
  "nationality": "US",
  "externalId": "usr_12345",
  "residentialAddress": {
    "line1": "123 Main St",
    "city": "New York",
    "state": "NY",
    "country": "US",
    "zipCode": "10001"
  },
  "identifyingInformation": [
    {
      "type": "ssn",
      "issuingCountry": "US",
      "number": "123456789"
    }
  ]
}

Response

Customer created

idstring
objectstring
type'individual'

Customer type. Only individual is supported for MVP.

firstNamestring nullable
middleNamestring nullable
lastNamestring nullable
emailstring nullable
phonestring nullable

Primary phone in E.164 format.

nationalitystring nullable

ISO 3166-1 alpha-2 country code.

externalIdstring nullable

Developer's own user ID for cross-referencing.

status'active' | 'inactive'

active or inactive. Inactive customers cannot create new transactions. No intermediate states - all granularity lives in endorsement statuses.

signedAgreementboolean

Whether the customer has accepted OMS terms of service.

signedAgreementAtstring date-time nullable

Timestamp when signedAgreement was set to true. Null if not yet signed.

metadataobject nullable
createdAtstring date-time
updatedAtstring date-time

Example response

{
  "id": "cst_01H9Xa8F5dN6mP3q",
  "object": "customer",
  "type": "individual",
  "firstName": "Jane",
  "lastName": "Smith",
  "email": "jane@example.com",
  "phone": "+12125551234",
  "nationality": "US",
  "externalId": "usr_12345",
  "status": "active",
  "signedAgreement": true,
  "signedAgreementAt": "2026-03-20T14:15:22Z",
  "wallets": [
    {
      "id": "wlt_01H9Xb3K7nM2pQ4r",
      "type": "custodial",
      "address": "0x7B3a9F2c4D1eA8bF6390cE5d2B7fA104C8e3D9b1",
      "network": "polygon",
      "asset": "usdc",
      "balance": "1234.56",
      "estimatedValueUsd": "1234.56"
    }
  ]
}