KYB Webhooks

Real-time KYB Event Notifications

Overview

VOVE ID uses webhooks to send real-time notifications about KYB case events to your application. Webhooks allow you to receive immediate updates when a case status changes, a UBO is invited, or verification is completed, eliminating the need for polling the API.

Webhooks are powered by Svixarrow-up-right, providing reliable delivery, automatic retries, and webhook signature verification.

Setting Up Webhooks

Dashboard Configuration

  1. Log in to the VOVE ID dashboard

  2. Navigate to Settings → Webhooks

  3. Add your webhook endpoint URL (must be HTTPS)

  4. Select which event types you want to receive

  5. Save and note your webhook signing secret

Endpoint Requirements

Your webhook endpoint must:

  • Accept HTTP POST requests

  • Use HTTPS (HTTP is not supported for production)

  • Return a 2xx status code within 15 seconds

  • Verify the webhook signature (recommended for security)

Webhook Events

KYB Case Events

kyb.case.created

Triggered when a new KYB case is created.

Payload:

kyb.case.status.changed

Triggered when a case status changes (e.g., NOT_STARTED → IN_PROGRESS → IN_REVIEW → COMPLETED/REJECTED).

Payload:

kyb.case.completed

Triggered when a case is approved and marked as completed.

Payload:

kyb.case.rejected

Triggered when a case is rejected.

Payload:

UBO Events

kyb.ubo.invited

Triggered when a UBO is invited to complete their verification.

Payload:

kyb.ubo.completed

Triggered when a UBO completes their KYC verification.

Payload:

Implementing Webhook Handlers

Node.js/Express Example

Python/Flask Example

Security Best Practices

Signature Verification

Always verify webhook signatures to ensure the request is from VOVE ID:

  1. Get the svix-signature header from the request

  2. Compute the expected signature using your webhook secret

  3. Compare the signatures using a timing-safe comparison

  4. Reject requests with invalid signatures

Idempotency

Webhooks may be delivered more than once. Implement idempotency handling:

For production systems, use a database instead of an in-memory Set.

Error Handling

Return appropriate status codes:

  • 200-299: Success, webhook acknowledged

  • 400-499: Client error, will not be retried

  • 500-599: Server error, will be retried with exponential backoff

Timeout Handling

Respond quickly (within 15 seconds) to avoid timeouts:

Testing Webhooks

Local Development with ngrok

Use ngrokarrow-up-right to expose your local server for webhook testing:

Testing with cURL

Simulate webhook events locally:

Webhook Retry Logic

VOVE ID automatically retries failed webhook deliveries:

  • Initial retry: After 5 seconds

  • Subsequent retries: Exponential backoff up to 1 hour

  • Maximum attempts: 5 attempts over 24 hours

  • Failure criteria: Non-2xx response or timeout

Failed webhooks are logged in the dashboard for manual review and retry.

Monitoring and Debugging

Dashboard Monitoring

Monitor webhook delivery in the VOVE ID dashboard:

  • View recent webhook deliveries

  • Check delivery status (success/failed)

  • View request/response details

  • Manually retry failed webhooks

Logging

Implement comprehensive logging in your webhook handler:

Common Use Cases

Update Case Status in Database

Enable Business Account on Completion

Notify Customer on Rejection

Track UBO Verification Progress

Last updated