Skip to main content
POST
Create customer

Authorizations

API-KEY
string
header
required

Your partner API key. The key must carry the customers permission.

Headers

Api-Version
string
default:2026-09.1
required

The API version this request targets. Required on every /api/v0/* call. Format YYYY-MM.<release>; 2026-09.1 is the latest. The version that served the request is echoed back on the response. Missing, malformed or unsupported values are rejected with 400.

Pattern: ^\d{4}-\d{2}\.\d+$

Body

application/json
userType
enum<string>
required

Required on every non-import create. Missing → 400 ERRCUS_1000 (userType is required); a value other than INDIVIDUAL on this path → ERRCUS_1001.

Available options:
INDIVIDUAL
email
string<email>
required

Unique across all Endl users, not only your customers. Checked case-insensitively and stored lower-cased. A duplicate is 400 ERRCUS_1600 (A user with email '…' already exists, field email).

firstName
string
required

The customer's given name, as it appears on their identity document.

Maximum string length: 100
lastName
string
required

The customer's family name, as it appears on their identity document.

Maximum string length: 100
dateOfBirth
string
required

DD-MM-YYYY, with no leading or trailing spaces. Must be a real past date, and the customer must be at least 18. A value with surrounding spaces currently fails with a 500 instead of a 400.

country
string
required

ISO 3166-1 alpha-3, e.g. ARE.

addressLine1
string
required

First line of the residential address. Required — the proof-of-address document is checked against it. Missing → ERRCUS_1018.

city
string
required

Town or city of residence. Required. Missing → ERRCUS_1019.

state
string
required

State, province or emirate of residence. Required. Missing → ERRCUS_1020.

questionnaire
object
required

The individual questionnaire. Every required item must be present and every coded value must come from the allowed list, or the whole request is rejected. Set on create only — it cannot be updated afterwards.

customFields
object
required

Partner-specific fields collected alongside the questionnaire. nationalIdNumber and whatsappNumber are required; an unrecognised key is rejected.

phone
string

Contact phone in E.164 format — a leading + then 8–15 digits, e.g. +971500000000. Invalid → 400 ERRCUS_1017. Unique across all users, individual or business — a phone already used by another customer is 400 ERRCUS_1601.

Pattern: ^\+[1-9]\d{7,14}$
Example:

"+971500000000"

nationality
string

ISO alpha-3. Defaults to country.

gender
enum<string>

M or F. Any other value is rejected.

Available options:
M,
F
tin
string

Taxpayer identification number.

taxResidenceCountry
string

ISO alpha-3.

placeOfBirth
string

Town or city of birth.

addressLine2
string

Second line of the residential address. Optional.

postalCode
string

Postal or ZIP code of the residential address. Required, except for countries with no postal-code system (ARE, HKG). Format-checked for USA, DEU, IND and GBR; for other countries any value is accepted. Missing → ERRCUS_1021; invalid for the country → ERRCUS_1022.

externalReferenceId
string

Your own reference. Accepted but neither stored nor returned. Keep your own mapping to the returned userId.

Response

Customer created or imported.

userId
string

Endl's customer reference id — a cus_-prefixed string, not a UUID. Save it: it goes in every later /api/v0/customer/{userId} URL.

Example:

"cus_PWEhqXkPKpWXiFd96jGq"

userType
string

INDIVIDUAL.

Example:

"INDIVIDUAL"

status
string

On a direct create: INITIATED until documents are submitted. On an import: the copied review outcome, which is COMPLETED, REJECTED or PENDING.

Example:

"INITIATED"

warnings
string[]

Individual imports only: identity fields that were ignored because identity came from the share token. Currently it also lists firstName, lastName and country, which are in fact stored. A business import returns no warnings.