For the complete documentation index, see llms.txt. This page is also available as Markdown.

KYB Webhooks

Real-time KYB Event Notifications

Overview

VOVE ID uses webhooks to send real-time notifications about KYB case status changes to your application. Webhooks allow you to receive immediate updates when a case moves into progress, enters review, is completed, or is rejected, eliminating the need for polling the API.

Webhooks are powered by Svix, 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.in_progress

Triggered when a KYB case moves into IN_PROGRESS.

Payload:

kyb.case.in_review

Triggered when a KYB case moves into IN_REVIEW.

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:

kyb.case.created is not currently emitted as an external webhook. Webhooks begin once the case status changes from NOT_STARTED.

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 ngrok 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

Last updated