Owners (business customers)

Two-step upload, step one. Returns a file_id, a presigned url, and the headers required to PUT the file directly to S3. URL is valid for 5 minutes and accepts a single PUT.

Step two: call POST /api/external/customer/{customer}/owner/{owner}/files with the same file_id to register the file against the owner.

Max file size 25 MB. Allowed MIME: application/pdf, image/jpeg, image/png. Owner must not be locked (status APPROVED or PROCESSING). Required scope: customer:write.

POSTapi-prod.blaaiz.com/api/external/customer/{customer}/owner/{owner}/file/presigned-url

Authorization

oauth2ClientCredentials customer:write
AuthorizationBearer <token>

Use your OAuth client credentials to obtain a short-lived Bearer token from POST /oauth/token.

In: header

Scope: customer:write

Path Parameters

customer*string
Formatuuid
owner*string
Formatuuid

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

application/json

Get an owner ID-file upload URL
curl --request POST \  --url 'https://example.com/api/external/customer/497f6eca-6276-4993-bfeb-53cbbbba6f08/owner/497f6eca-6276-4993-bfeb-53cbbbba6f08/file/presigned-url' \  --header 'Content-Type: application/json' \  --data '{  "file_category": "id_document_front"}'
{  "message": "Upload URL generated successfully",  "data": {    "file_id": "f6c04a3e-3cdb-4b07-87e5-7a7c0d8b1c10",    "url": "https://s3.amazonaws.com/...?X-Amz-Signature=...",    "headers": {      "x-amz-acl": "private"    }  }}

DELETEDelete a KYB document

Removes a KYB document from the customer's collection. Returns 400 if the document is locked (status APPROVED or PROCESSING). Required scope: `customer:write`.

POSTRegister owner ID files

Register one or both of the owner's ID document slots (`id_document_front`, `id_document_back`). Each `file_id` must come from a fresh `POST /api/external/customer/{customer}/owner/{owner}/file/presigned-url` call. Send only the slots you want to set or replace. **Lock guards.** - The parent customer must be in `PENDING` or `REJECTED`. Calls against a `PROCESSING` or `VERIFIED` customer return `400`. - The owner itself must be in `PENDING` or `REJECTED`. Calls against an `APPROVED` or `PROCESSING` owner return `400`. - Replacing a file on a previously `REJECTED` owner automatically resets that owner's `status` to `PENDING` and clears its `admin_comments` — the corrected record is re-routed through review on the next `/submit`. **File checks.** The server verifies S3 existence, file size (max 25 MB), and MIME type (PDF, JPEG, or PNG) before persisting. **Slot vs. type consistency** is enforced at `/submit` time, not on this call. The eventual rule is: - `passport` → `id_document_front` only; `id_document_back` must be absent. - `drivers_license`, `id_card`, `resident_permit` → both `id_document_front` and `id_document_back` are required. If you change the owner's `id_document_type` later, make sure the slot set still matches — otherwise `/submit` will reject the customer. All uploaded documents must be **clear, legible, and authentic**. Blurry, cropped, obscured, or otherwise unclear images will be rejected. Fraudulent or falsified documents will not be tolerated — repeated attempts to submit false or invalid documents will result in the customer being **permanently blacklisted** from the platform. There are no exceptions or compromises. Required scope: `customer:write`.