Enroll new customer
Customers
Enroll Customer
Register a new customer using publicly accessible URLs to their KYC documents (JSON request body, no file upload).
POST
Enroll new customer
Overview
POST /customers/enroll registers a new customer in your company using publicly accessible URLs to the KYC documents instead of uploading the files directly. This is useful when documents are already hosted in your own object storage (S3, GCS, etc.). For local file uploads, use POST /customers instead.
The customer is enrolled with the upstream card issuer in the same call, so they become eligible for card issuance immediately on success (subject to KYC outcome).
When to use it
| Use this endpoint when… | Use POST /customers when… |
|---|---|
| Documents are already hosted at public HTTPS URLs (S3, GCS, etc.). | Documents are local files in your server. |
| You prefer JSON-only requests (easier to log, audit, and replay). | You want a single round-trip without first uploading. |
Prerequisites
- Your company has completed KYB and is in
APPROVEDstatus. - The document URLs must be reachable over HTTPS by the upstream verifier (which may fetch them more than once).
Request
Headers
| Name | Required | Description |
|---|---|---|
Authorization | Yes | Bearer <access_token> |
Content-Type | Yes | application/json |
Body fields
| Field | Type | Required | Constraints / notes |
|---|---|---|---|
first_name | string | Yes | 3–255 chars |
last_name | string | Yes | 3–255 chars |
email | string | Yes | Valid email |
country | string | Yes | Full country name, e.g. "Cameroon" |
street | string | Yes | 2–255 chars |
city | string | Yes | 2–255 chars |
state | string | Yes | 2–255 chars |
postal_code | string | Yes | 3–255 chars |
country_iso_code | string | Yes | ISO 3166-1 alpha-2, e.g. CM, NG |
country_phone_code | string | Yes | Dial code with +, e.g. +237 |
phone_number | string | Yes | Local subscriber number (no country code) |
identification_number | string | Yes | Format depends on id_document_type |
id_document_type | string | Yes | Enum: NIN, PASSPORT, VOTERS_CARD, DRIVERS_LICENSE |
date_of_birth | string (date) | Yes | YYYY-MM-DD. Customer must be 18+ |
id_document_front_url | string (URL) | Yes | Publicly fetchable HTTPS URL to the front of the ID |
id_document_back_url | string (URL) | Yes | Publicly fetchable HTTPS URL to the back of the ID |
URL requirements
- HTTPS only. Plain HTTP URLs are rejected.
- Reachable by the upstream verifier. If the URL is gated (Basic Auth, IP allowlist, signed URL), the verifier will fail to fetch it.
- Stable. The verifier may fetch the URL multiple times during processing. Signed URLs with very short expiry windows are not recommended; use a TTL of at least 30 minutes.
- Direct file URLs, not landing pages. The response should be the image/PDF bytes with a correct
Content-Typeheader.
Example
Response
201 — Customer enrolled
POST /customers field reference for descriptions — the response shape is identical.
Error responses
| Status | message example | Trigger |
|---|---|---|
400 | "id_document_front_url must be HTTPS" | A document URL uses http:// instead of https://. |
400 | "Customer must be 18 or older" | date_of_birth is less than 18 years ago. |
409 | "Customer with this email or ID already exists" | Duplicate email or identification_number in your company. |
422 | "Could not fetch id_document_front_url" | The verifier couldn’t reach or download the URL. |
422 | "KYC document unreadable" | The verifier rejected the document quality. |
Webhooks fired
customer.created— emitted immediately after the customer record is persisted.
Related
POST /customers— file-upload variant (multipart/form-data).GET /customers/{id}— check the resulting customer record.
Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Body
application/json
Required string length:
3 - 255Example:
"John"
Required string length:
3 - 255Example:
"Doe"
Required string length:
2 - 255Example:
"Nigeria"
Example:
"john.doe@example.com"
Required string length:
2 - 255Example:
"123 Main Street"
Required string length:
2 - 255Example:
"Lagos"
Required string length:
2 - 255Example:
"Lagos State"
Required string length:
3 - 255Example:
"100001"
Required string length:
1 - 255Example:
"CM"
Required string length:
1 - 255Example:
"+234"
Required string length:
3 - 255Example:
"8012345678"
Required string length:
1 - 255Example:
"12345678901"
Example:
"https://example.com/documents/front.jpg"
Example:
"https://example.com/documents/back.jpg"
Available options:
NIN, PASSPORT, VOTERS_CARD, DRIVERS_LICENSE Example:
"NIN"
Example:
"1990-01-15"