Skip to main content
How a parent account starts a hosted KYC for one of its sub-accounts via redirect (no email - you get a widget URL back and redirect the customer yourself), and registers a webhook to receive status updates. This is the same endpoint and the same webhook behaviour as the email flow - the only differences are flow_type: "redirect", customer_email is not required, and the response returns a widget_url instead of emailing a link.

Flow

1

Create the session

Parent calls Create KYC Session with flow_type: "redirect" and a webhook_url.
2

Vobiz returns a widget_url

Vobiz returns a widget_url. You redirect the customer to it.
3

Customer completes KYC

Customer completes KYC in the Vobiz-hosted widget.
4

Receive webhook events

Vobiz POSTs webhook events to your webhook_url at each stage (initiated → submitted → completed/failed).

1. Create the KYC session (register the webhook)

Auth: parent main account - X-Auth-ID: MA_xxxx + X-Auth-Token: <token> (or Authorization: Bearer <JWT>). The sub_auth_id path param (SA_xxxx) identifies the sub-account being verified.
Body:
account_auth_id in the schema is set automatically from the path sub_auth_id for this flow - you don’t need to send it.
Response 201:
Redirect the customer to widget_url to start KYC. (kyc_link is only returned in dev for testing.)

2. Webhook events you’ll receive

Identical to the email flow - Vobiz POSTs JSON to your webhook_url as the session progresses: Payload:

3. Verify the signature

Every delivery includes an HMAC signature header (same as email flow):
  • Algorithm: HMAC-SHA256 over the raw request body.
  • Secret: your parent account’s auth_token.
Verify (Python):
Return 2xx to acknowledge. Failed deliveries are retried with exponential backoff.

cURL example

Copy-paste starter - create a redirect-flow session with both your webhook and redirect URLs in one call:

Email vs Redirect

Same endpoint, same webhooks.
  • email → Vobiz emails the customer the link (needs customer_email). See the email flow.
  • redirect → you get widget_url back and redirect the customer yourself (no email).