KYC Webhooks
Instead of polling the/v1/kyc/status endpoint, you can register a webhook URL to receive real-time notifications when a user’s KYC status changes.
Registering Your Webhook
Request
Request Fields
| Field | Type | Required | Description |
|---|---|---|---|
webhookUrl | string | Yes | HTTPS URL where you want to receive KYC notifications |
Response
Response Fields
| Field | Type | Description |
|---|---|---|
validated | boolean | True if the test request to your webhook URL succeeded |
message | string | Status message with details |
Webhook Validation
When you register a webhook URL, the system sends a test request to verify:- The URL is reachable
- Your server responds with a 2xx status code
- The response is received within the timeout period
Webhook Payload
When a user’s KYC status changes, you’ll receive a POST request to your webhook URL with the following payload:Payload Fields
| Field | Description |
|---|---|
externalId | The user_id you provided when starting KYC |
decision | Final decision: ACCEPT, REJECT, REVIEW, or empty |
status | Current status: NOT_STARTED, OPEN, ON_HOLD, CLOSED |
subStatus | Detailed sub-status (e.g., Document Request Initiated) |
participantId | EP3 participant ID (populated after approval) |
account | EP3 account ID (populated after approval) |
Best Practices
- Respond quickly - Return a 2xx response within 5 seconds to acknowledge receipt
- Process asynchronously - Queue the webhook payload for processing rather than handling inline
- Implement idempotency - You may receive duplicate notifications; use
externalIdto deduplicate - Secure your endpoint - Use HTTPS and validate the request source
- Handle all statuses - Your webhook should gracefully handle any status value

