Skip to main content

KTP Check

Verify NIK, name, date of birth, and KTP photo.

Base URL​

https://use.api.co.id

Send nik, name, date_of_birth, a KTP photo (identity), and an optional selfie to POST /id-verification/verify as multipart/form-data with the x-api-co-id header. The response contains result (verified or rejected), the provider message, and an optional reject_reason.

Request fields​

FieldRequiredRule
nikyes16 digits
nameyesName as shown on the ID
date_of_birthyesFormat DD-MM-YYYY
identityyesKTP photo JPG/JPEG/PNG, max 5 MB
selfienoSelfie photo JPG/JPEG/PNG, max 5 MB
curl -X POST "https://use.api.co.id/id-verification/verify" \
-H "x-api-co-id: YOUR_API_KEY" \
-F "nik=1203122810970002" \
-F "name=User Info" \
-F "date_of_birth=01-10-1990" \
-F "identity=@/absolute/path/to/ktp.jpg" \
-F "selfie=@/absolute/path/to/selfie.jpg"

Server-side fields​

  • You don't send reference_number. API.CO.ID generates it automatically and returns it in the response.
  • If the provider needs an email or phone, API.CO.ID uses the account email and the phone number from approved KYC.
  • If selfie is sent, API.CO.ID forwards it to the provider and returns the provider response as is. If it is not sent, API.CO.ID uses an internal fallback selfie to stay compatible with older requests.

Results​

Verified:

{
"is_success": true,
"message": "Success",
"data": {
"reference_number": "REF-20260725-0001",
"channel_id": "001",
"result": "verified",
"message": "digital certificate has been issued"
}
}

Rejected:

{
"is_success": true,
"message": "Success",
"data": {
"reference_number": "REF-20260725-0002",
"channel_id": "001",
"result": "rejected",
"message": "identity did not match",
"reject_reason": {
"code": "ID_MISMATCH",
"reason": "identity mismatch"
}
}
}

result: rejected still returns HTTP 200 because the provider processed the verification successfully; the match just didn't pass. It counts as a successful business request.

Access & billing​

API.CO.ID checks access in this order:

  1. Valid API key.
  2. Enough balance/subscription for id-verification.
  3. Customer eKYC approved.
  4. Request forwarded to the provider.
  5. Points charged only if the provider processes the request.

Common errors​

HTTPCondition
400Bad RequestKTP file missing, unsupported file type, or file larger than 5 MB
401UnauthorizedAPI key missing or wrong
402Payment RequiredInsufficient balance/subscription
403ForbiddeneKYC not approved, pending, rejected, or expired
422UnprocessableInvalid NIK, DOB, account email, KYC phone number, or other field format
500Server ErrorProvider channel misconfigured
502Bad GatewayProvider auth/server/response error
504Gateway TimeoutProvider timeout
Was this page helpful?