Two-step process: This endpoint registers the borrower and merchant profiles only. The merchant must pass KYB and reach activestatus before you can submit a loan — see Submit Loan.
| Item | Description |
|---|---|
| Method | POST |
| Path | /v1/onboarding/personal |
| Auth | OAuth2 Client Credentials (Bearer Token) |
| Content-Type | application/json |
| Header | Type | Required | Description |
|---|---|---|---|
Authorization | String | Yes | Bearer <access_token> |
borrower)| Field | Type | Required | Description |
|---|---|---|---|
name | String | Yes | Full name of the borrower as per identity card. |
email | String | Yes | Active email address of the borrower. |
phone_number | String | Yes | Borrower's phone number without country code (e.g., 81234567890). |
identity_number | String | Yes | KTP (NIK) number, 16 digits. |
doku_wallet_id | String | Yes | The DOKU Wallet ID of the borrower. |
taxpayer_identification_number | String | No | NPWP number (15 or 16 digits). Must be unique if provided. |
business_identification_number | String | No | NIB (business registration number). |
merchant)| Field | Type | Required | Description |
|---|---|---|---|
name | String | Yes | Registered business name. |
description | String | No | Brief description of the business. |
addresses | Array | Yes | List of business locations. At least one required. |
contacts | Array | Yes | PIC or Owner details. Exactly one required. |
brands | Array | Yes | Brand or trade name information. At least one required. |
| Field | Type | Required | Description |
|---|---|---|---|
name | String | Yes | Full address details. |
area_id | UUID | Yes | QFAST Area ID. See the Area Reference for the full list of valid IDs. |
primary | Boolean | Yes | Set to true for the main business location. |
| Field | Type | Required | Description |
|---|---|---|---|
name | String | Yes | Full name of the owner/PIC. |
owner_liveness_file_url | String | Yes | Public URL to the liveness photo (selfie with ID). |
owner_identity_file_url | String | Yes | Public URL to the identity card (KTP) photo. |
| Field | Type | Required | Description |
|---|---|---|---|
name | String | Yes | Brand or trade name. |
category | String | Yes | Business category. Enum: retail, non_retail. |
description | String | Yes | Description of products or services. |
transaction_frequency | String | No | Annual revenue range. Enum: uke (< 200 Mio IDR), ume (200 Mio – 4 Bio IDR), ube (> 4 Bio IDR). |
transaction_quantity | String | No | Monthly transaction count. Enum: up_to_100, from_100_to_10k, more_than_10k. |
photo_proof_file_url | String | Yes | Public URL to a photo proof of the business (e.g., storefront). |
{
"data": {
"merchant_id": "019db2ee-3857-7148-b320-6f6e7c4deedd",
"identity_number": "3201234567890001",
"onboarding_status": "pending",
"kyb_revision_deadline": null,
"kyb_rejection_details": null,
"created_at": "2026-05-11 08:00:00",
"updated_at": "2026-05-11 08:00:00"
}
}| Field | Type | Description |
|---|---|---|
merchant_id | UUID | Unique identifier for the registered merchant. Store this — it is required for the Loan Submission step. |
identity_number | String | The borrower's KTP number. |
onboarding_status | String | Current KYB status. See Status Values below. |
kyb_revision_deadline | DateTime|null | Deadline to resubmit if KYB needs revision. |
kyb_rejection_details | String|null | Rejection reason if status is kyb_rejected. |
created_at | DateTime | Record creation timestamp. |
updated_at | DateTime | Last update timestamp. |
| Status | Description |
|---|---|
pending | Registration received, awaiting DOKU KYB submission. |
kyb_processing | DOKU is actively processing the verification. |
kyb_approved | KYB verification passed. Ready for loan submission. |
kyb_revision_needed | DOKU requires corrections. Resubmit within kyb_revision_deadline. |
kyb_rejected | KYB verification permanently failed. See kyb_rejection_details. |
active | Onboarding complete and merchant is fully active. |
suspended | Merchant account is suspended. |
{
"error": "invalid_token",
"error_description": "The access token is missing or invalid.",
"code": 401
}{
"error": "validation_failed",
"error_description": "Field 'email' must be a valid email address.",
"code": 422
}| HTTP Status | Error | Cause |
|---|---|---|
401 | invalid_token | Missing or invalid access token. |
422 | validation_failed | Missing required fields or invalid formats. |
onboarding_status reaches active, proceed to Get Loan.