Skip to main content
The KYC SDK is Zapyd’s hosted verification flow. You create a link and redirect the user to it. Zapyd collects the documents, verifies them and sends you the result. You never handle identity documents.

See the flow

An interactive demo of every screen an Indian user sees.

Already verify users?

Use KYC sharing to submit data you collected.

Flow

Create the customer first, then call POST /kyc/generate-link.
Open url in the browser, a new tab or a webview. When the user finishes, Zapyd sends them to your redirect_url. It’s optional: without it, Zapyd uses the redirect URL set for your organization.
Arriving at redirect_url doesn’t mean the user passed KYC. Always wait for the CUSTOMER webhook, or read the customer’s status.
If you embed the flow in a webview or an iframe, allow camera access. The selfie step needs it.

3. What the user does (India)

Indian users need Aadhaar or a passport, and a PAN. The flow runs three checks in order.
1

PAN

The user enters their name, date of birth and PAN. Zapyd checks that the PAN is valid, belongs to an individual, matches the name and date of birth, and is linked to an Aadhaar.
2

Identity document

Aadhaar: the user authenticates with an OTP through DigiLocker, so there’s nothing to upload. Passport: the user uploads the front and back pages. Zapyd runs forgery detection and OCR, then matches the name and date of birth with the PAN.
3

Liveness and face match

The user takes a live selfie. Zapyd confirms it isn’t a photo of a photo, then matches the face with the document.
When all three checks pass, the customer becomes VERIFIED.

4. Get the result

Most results arrive within minutes. Manual review can take up to 2 hours. Zapyd sends a CUSTOMER webhook:
If you can’t receive webhooks, poll GET /customer/{customer_id} no more than once a minute.

5. Handle a failure

On FAILED, read metadata.failure_reason, tell the user what went wrong, and generate a new link. Each customer has three attempts.

Test it in sandbox

You don’t need to run the hosted flow in sandbox. Set the result with Mock KYC Status, then check your webhook handler.