KYC Verify

One call. One decision you can act on.

Selfie and KTP in — approved, review or rejected out.

POST /v1/kyc/verify scope: biometric:kyc_verify
Key points

Why teams use KYC Verify

The whole check, one price

Quality gate, face match, passive liveness and document checks in a single call.

Never approved on a guess

Approval requires every component to pass; anything inconclusive returns review.

Document checks included

Document integrity and data-consistency checks run on every card.

Clear next steps

Stable reason codes and user-safe retake guidance on every non-approval.

How it works

From request to result

  1. Send a selfie and KTP photo in one signed POST.
  2. Components run in order and feed one decision engine.
  3. Receive the decision, reason codes and guidance.
Know the limits. Every response states which document checks were performed. Detection scope, limitations and model details are documented for customers in the dashboard.

One bundle price per completed verification — not billed per component. Photos rejected by the quality gate (422) and errors are free.

Full API reference →
request · examplePOST
POST /v1/kyc/verify
Idempotency-Key: 2e7d…

{
  "selfie":    { "image": "<base64>" },
  "reference": { "image": "<base64 KTP>" },
  "clientRef": "user_123"
}
response · example200
// example
{
  "data": {
    "decision": "approved",
    "faceMatch": { "decision": "PASS" },
    "liveness":  { "decision": "PASS" },
    "document":  { "authenticity": { "status": "PASS" } },
    "reasonCodes": []
  }
}
FAQ

Questions

What should I do with "review"?

Hold the application and resolve it with POST /v1/analyses/:id/review. The original automated decision stays in the audit trail.

Can I get the KTP data in the same call?

Yes, with options.extractIdentity. The key also needs the document:ocr scope.

Put KYC Verify into production.

Request access and our team activates your account, or talk to sales about volume.

KYC Verify · from Rp1.750Request API access