Skip to main content
title: “Webhooks” description: “Receive submission and verification events for hosted KYC sessions” icon: “link” Webhooks notify your server about submission creation and final verification outcomes for hosted sessions.

Configure

  • Enable webhooks in Console → Workspace Settings → Notifications
  • Set webhookUrl (HTTPS)
  • A signing webhookSecret is stored per workspace
  • Choose events to receive

Security

Each request includes an HMAC signature header using your webhookSecret.
Verify the signature by recomputing HMAC‑SHA256 over the exact raw body JSON string and comparing constant‑time to the header value.

Event delivery

  • Sent as JSON over HTTPS to your configured endpoint
  • At‑least‑once delivery — de‑duplicate using the id field
  • Events are filtered by your workspace webhookEvents allow‑list
  • Monitor deliveries in your logs; retries/backoff may be added in the future

Event types

  • submission.created — Emitted immediately after a submission is persisted
  • verification.completed — Hosted session finished with pass
  • verification.failed — Hosted session finished with fail

KYC status

In addition to the legacy session lifecycle (not_started → processing → completed/failed), webhook events include a high-level KYC status for business decisions:
  • Approved: AI pass and auto-approve enabled
  • Submitted: AI pass and auto-approve disabled (awaiting manual decision)
  • Declined: AI fail, or manual rejection

Payload shape

We do not include raw image bytes in webhook payloads. Use the signed URLs for access control or copy to your storage if needed.

Test delivery

Use the API to trigger a test event:
Body:
Response (200): { ok: true, status: 200 } for successful delivery. Failures respond with { ok: false, ... } but still HTTP 200.

Example handler