Returns every KYB document the business has registered for this customer. Each row's url is a 2-minute presigned link to the underlying file. The customer must be of type business. Required scope: customer:read.
Authorization
oauth2ClientCredentials customer:readUse your OAuth client credentials to obtain a short-lived Bearer token from POST /oauth/token.
In: header
Scope: customer:read
Path Parameters
Customer ID.
uuidResponse Body
application/json
application/json
curl --request GET \ --url 'https://example.com/api/external/customer/497f6eca-6276-4993-bfeb-53cbbbba6f08/document'{ "data": [ { "id": "019a6e10-1fb3-7b2f-8f8b-ad1e92c4017a", "business_customer_id": "019a6da3-4a9a-7033-81b9-12489eff13ee", "type": "CERTIFICATE_OF_INCORPORATION", "name": "Acme Inc — Certificate of Incorporation.pdf", "extension": "pdf", "description": "Filed 2019-03-12, Companies House", "status": "PROCESSING", "admin_comments": null, "url": "https://s3.amazonaws.com/...?X-Amz-Signature=...", "created_at": "2026-04-20T10:14:31.000000Z", "updated_at": "2026-04-20T10:14:31.000000Z" } ]}POSTUpgrade a business customer from MINIMAL to FULL KYB
Promote a `kyb_scope=MINIMAL` business customer to `kyb_scope=FULL` by attaching beneficial-owner data. Identity columns (`registration_number`, `incorporation_country`) are typically already on file from MINIMAL onboarding. **Eligibility checks (return `422` on failure):** - Customer exists and belongs to your platform. - Customer is `type=business`. - Customer is currently `kyb_scope=MINIMAL` (or has no scope set, treated as Minimal). A FULL customer cannot be "upgraded" again. - Customer is not `PROCESSING` (rejected with `400` — wait for the customer-level webhook before retrying). **Validation (return `422` on failure):** - At least one owner. - Ownership percentages sum to exactly 100. - Per-owner identity invariants (DOB ≥ 18, expiry future, valid ISO codes where supplied). - Owner emails unique within the customer. - If you send `registration_number` / `incorporation_country` overrides, they must satisfy the same rules as create. - If you send `country` to update jurisdiction, the resulting `country` and `incorporation_country` must match. **On success:** 1. New owners are saved on the customer. 2. `kyb_scope` flips to `FULL`. 3. If the customer was `VERIFIED`, `verification_status` flips back to `PENDING` (re-onboarding under stricter rules). Existing NGN VBAs are unaffected. 4. An audit comment is recorded. 5. A `customer.status_changed` webhook fires for the verification-status transition (if any). **Important:** This endpoint does NOT run the Standard readiness checks. Owner ID files are not part of this payload — upload them per-owner via `POST /api/external/customer/{id}/owner/{owner}/files` after the upgrade succeeds. Then call `POST /api/external/customer/{id}/submit` to re-verify the customer under the Standard checks. Required scope: `customer:write`.
GETShow a customer KYB document
Retrieves a single KYB document by ID. The customer must be of type `business` and the document must belong to the supplied customer. Required scope: `customer:read`.