Skip to main content

Response shape

On success the body is the data object. There is no envelope — the HTTP status tells you it succeeded.
Success — 201 from create
On failure you get a flat object naming the problem: code is the HTTP status, message the specific reason, and name the operation that failed.
One problem
When several things are wrong at once they arrive together, one entry each, and nothing is created.
Several problems
Two exceptions to the flat shape. A 503 returns the errors[] form, and a 429 keeps the older envelope — { data, code, message, status, errors }. Parse defensively: check for errors first, then fall back to the flat fields.

Status codes

A 503 on create is safe to retry with the same body — Endl reconciles rather than creating a duplicate.

The three conflicts

409 means one of exactly three things:
This customer's KYC is completed; verified identity fields can no longer be changed
Cannot delete a customer that holds a balance — the amount is never disclosed. Clear the balance first.

Verification lifecycle

For an individual, uploading the photo ID auto-submits and moves the customer to PENDING. For a business, submission waits until the company documents and every owner’s documents are uploaded.

Identity locks on completion

Once a customer reaches COMPLETED, the fields the provider verified can no longer be changed — firstName, lastName, phone, dateOfBirth, country, nationality, gender, placeOfBirth, tin, taxResidenceCountry and the address. Touching any of them returns 409 and nothing is written. Database-only fields (currency, countryId, currencyId) stay editable.

Validation reference

A few messages read generically — a reused share token returns plain Bad Request, and a missing customer returns Not found. The status code plus name tell you which operation failed.