Skip to content

Create a verification

Create one verification per person and occasion (an order, a booking, an account sign-up), from your server, at the moment the person needs it.

POST https://verify.zetaid.com/api/v1/verifications
X-SDK-Key: vk_live_…
Content-Type: application/json

Every field is optional; an empty body ({}) uses the key’s settings.

FieldType
return_urlstringWhere the verification page sends the person when they are done.
extra_dataobjectYour own reference, returned in every webhook and GET (for example {"order_id": "A-17"}).
flowstring[]The steps for this verification only, instead of the key’s flow. Module names as in Configure a key.
module_overridesobjectSettings for single modules of this verification, for example prefilled form values (below).

return_url: the page shows “Continue” and moves on after a few seconds. ZetaID adds nothing to the URL, so put your own reference in it (https://shop.example/checkout/verified?order=A-17). Treat the return as “the person is back”, never as “the person is verified”: the result comes from your server (Get the result).

extra_data: a small JSON object of your own identifiers. Don’t put personal data in it (no names, birth dates or email addresses) — it is stored with the verification and sent back in every webhook.

module_overrides: for a form_data step, prefill values and lock the ones the person must not change:

{
"module_overrides": {
"form_data": {
"values": { "booking_reference": "ABC123" },
"locked": ["booking_reference"]
}
}
}

201 Created:

{
"verification_id": "3f6c2a9e-7d41-4b8a-9c2e-5a1f0d7b3e64",
"url": "https://verify.zetaid.com/?verification_id=3f6c2a9e-7d41-4b8a-9c2e-5a1f0d7b3e64",
"flow": ["document", "liveness"],
"due_at": "2026-11-02T10:15:00Z",
"expires_at": "2027-01-30T10:15:00Z"
}
Field
verification_idStore it with your order, booking or account.
urlThe link for the person. Use it as it is; it can be on your own branded host if we set one up for you.
flowThe steps this verification will go through.
due_atUntil when the link works. Afterwards the verification expires (verification.expired).
expires_atWhen the captured images will be deleted (the key’s image retention).
const res = await fetch("https://verify.zetaid.com/api/v1/verifications", {
method: "POST",
headers: { "X-SDK-Key": process.env.ZETAID_API_KEY, "Content-Type": "application/json" },
body: JSON.stringify({
return_url: `https://shop.example/checkout/verified?order=${order.id}`,
extra_data: { order_id: order.id },
}),
});
if (!res.ok) throw new Error(`ZetaID ${res.status}: ${(await res.json()).error?.code}`);
const { verification_id, url } = await res.json();
Statuserror.codeWhat to do
401SDK_KEY_INVALIDThe key is missing, wrong or deactivated.
402CREDITS_EXHAUSTEDYour prepaid balance is below zero. Top up in the operator console (Billing).
403SERVER_SIDE_ONLYThe request came from a web page. Call the API from your server.
422FLOW_INVALIDAn unknown module in flow, or no step the person does.
503SYSTEM_TEMPORARILY_UNAVAILABLEChecks that analyse images can’t start right now. Retry after a short wait.

All errors: Errors.