Create a customer
Creates a new customer scoped to the calling merchant’s integration.
Body
-
type— required. One ofindividual,business. -
name— required. Full name of the customer. Max 255 chars. -
email— required. Valid email. Max 255 chars. Per-integration uniqueness is enforced case-insensitively. -
country_code— required. ISO-3166-1 alpha-2 (e.g.NG,KE). Countries on the compliance prohibited list are rejected with400 prohibited_country. -
metadata— optional. Free-formRecord<string, string>. -
merchant_reference— optional. Max 128 chars. Auto-generated asref_<ULID>when omitted. Per-integration unique. -
profile— optional object carrying the identity fields required to convert (onramp/offramp). When supplied it must be complete for the customertype:individualrequiresphone,address,date_of_birth,id_number,id_type.businessrequiresphone,business_licence.
Fields:
phone,address,id_number,id_type,business_licenceare strings;date_of_birthmust bemm/dd/yyyy. A supplied-but-incompleteprofilefor thetypereturns400 invalid_input.
Example
POST /v1/customers
{
"type": "individual",
"name": "Alice Johnson",
"email": "alice@example.com",
"country_code": "NG",
"profile": {
"phone": "+2348012345678",
"address": "1 Marina Rd, Lagos",
"date_of_birth": "01/15/1990",
"id_number": "A12345678",
"id_type": "passport"
}
}
Authorizations
API key issued during merchant onboarding.
Headers
Optional client-supplied key. Identical key + identical body within 24h replays the original response. Identical key + different body returns 409 idempotency_conflict. The hash is over raw bytes — clients retrying must send the byte-identical body; a re-serialised JSON payload will produce a different hash and a 409. Strongly recommended for retry-safe clients.
^[A-Za-z0-9_\-]{8,255}$Body
CreateCustomerDto