Create a verification session
/v1/sessionsReturns a hosted link to send the person to. With workflow_id the session runs that published workflow of your organization; without it, the full verification.
Send your API key in the x-api-key header.
Headers
- Idempotency-Keystring1–255 chars
1 to 255 visible ASCII characters. Retrying with the same key and body within 24 hours returns the first response instead of creating a second session.
Request bodyapplication/json
- workflow_idstring | null
A published workflow of your organization.
- vendor_datastring | null≤ 256 chars
Your id for the person. Returned in webhooks and results. While a session for the same vendor_data and workflow_id is unfinished, creating again returns it.
- metadataobject | null
Your JSON, up to 16 KB. Returned in webhooks and results. Stored as plain JSON: do not put sensitive personal data here.
- callback_urlstring | nulluri≤ 2048 chars
https URL the person is sent back to at the end.
- languagestring | null
One of
endefrit - contactobject | null
Prefills the email and phone steps of the workflow.
Show 2 child propertiesHide child properties
- emailstring | null≤ 254 chars
- phonestring | null≤ 32 chars
E.164, e.g. +41791234567.
- reusableboolean | null
The person may present their secuveri ID (secuveri Wallet) instead of capturing a document; a new liveness selfie is matched against its portrait. Needs Liveness Check and Face Match in the workflow; not with AML screening, proof of address or age estimation (422). 503 when reusable verification is not available.
- typestring | null
reauth: a selfie with liveness matched against the face of the customer's last approved verification (needs vendor_data). 409 no_reference when no stored face remains.
One of
verificationreauth - send_linkstring | null
Also send the hosted link to contact.email or contact.phone, in the session's language. Organization keys only.
One of
emailsms - sandbox_scenariostring | null
sk_test_ keys only. The session finishes at once with this outcome, with the usual webhook and signed result. Free; nothing is captured.
One of
approveddeclined_tampereddeclined_expireddeclined_unreadabledeclined_face_mismatchreview_livenessreview_amlreview_documentcheck_error - expected_detailsobject | null
Who you expect. A field that disagrees with the document sends the verification to review (EXPECTED_DETAILS_REVIEW). Dates as YYYY-MM-DD, countries as ISO alpha-3. The address fields are not on identity documents and are never compared with them: the FINMA profile uses them for its digital address evidence (country against the IP country; Swiss postal code and locality against the official directory) when no proof of address was read.
Show 9 child propertiesHide child properties
- first_namestring | null
- last_namestring | null
- date_of_birthstring | null
- nationalitystring | null
- document_countrystring | null
- document_numberstring | null
- address_countrystring | null
- address_postal_codestring | null
- address_localitystring | null
Responses
200The session. A replayed response carries the header idempotent-replayed: true; a returned open session carries secuveri-session-reused: true.
- session_idstringuuidrequired
- verification_idstringrequired
- statusstringrequired
One of
CREATEDDOC_PROCESSINGMRZ_FOUNDNFC_PROCESSINGDOC_DONESELFIE_PROCESSINGSELFIE_DONECOMPLETEFAILEDREVIEW_REQUIREDCHECK_ERROREXPIRED - created_atstringdate-timerequired
- session_tokenstringrequired
Grants the person's browser access to this session.
- urlstring | null
The hosted verification link.
- sandbox_scenariostring
Echoed when the session was finished by a scenario.
- link_sentobject
Present when send_link was requested, including on reused sessions. queued means durably accepted for background delivery, not sent or delivered; cooldown means a pending job, the 30-second resend interval, or the five-per-hour limit prevents another send.
Show 2 child propertiesHide child properties
- channelstring
One of
emailsms - statusstring
One of
queuedcooldownsentfailedunavailable
- referenceobject
type reauth: whose stored face is the reference.
Show 2 child propertiesHide child properties
- verification_idstring
- sourcestring
One of
stored_chipstored_selfiestored_document
- reusedboolean
true when an unfinished session for the same vendor_data and workflow_id was returned instead of a new one.
- 401Missing, unknown or expired API key.
- 402The balance does not cover the verification (code insufficient_balance or payment_hold).
- 403The key lacks the scope this call needs, or its IP allowlist refuses the caller.
- 404workflow_id does not name a workflow of your organization.
- 409The workflow is not published, a request with this Idempotency-Key is still running, or (type reauth) no stored face remains (code no_reference).
- 422A field is invalid, the Idempotency-Key was used with a different body, or sandbox_scenario was sent with a live key.
- 429Too many requests.
curl -X POST https://api-verify.secuveri.com/v1/sessions \
-H "x-api-key: $SECUVERI_API_KEY" \
-H "content-type: application/json" \
-H "Idempotency-Key: signup-1042-retry-safe" \
-d '{
"workflow_id": "<published workflow id>",
"vendor_data": "customer-1042",
"callback_url": "https://example.com/verified"
}'{
"session_id": "6f1c2e0a-8f43-4f7e-9a51-2b7c1d9e4a10",
"verification_id": "VRF-7KQ2M9XA",
"status": "CREATED",
"created_at": "2026-10-23T09:12:44.120Z",
"session_token": "…",
"url": "https://verify.secuveri.com/verification/VRF-7KQ2M9XA?t=…"
}