Skip to main content
WEBHOOK

Authorizations

Authorization
string
header
required

API key sent as a bearer token: Authorization: Bearer kyc_live_.... Keys are prefixed kyc_live_ (production) or kyc_test_ (test mode). OAuth2 access tokens (also Bearer) may be supported later — the header never changes.

Headers

webhook-id
string<uuid>
required

The event ID, the same as data.id. Stable across retries: use it to deduplicate. Part of the signed content.

webhook-timestamp
string
required

Unix time in seconds when this attempt was sent. New on every attempt. Part of the signed content. Reject a request whose timestamp is more than 5 minutes from your clock.

Pattern: ^[0-9]{1,12}$
webhook-signature
string
required

One or more space-separated signatures, each v1, followed by the base64 HMAC-SHA256 of {webhook-id}.{webhook-timestamp}.{raw body}, keyed with your signing secret (the bytes after decoding the base64 part of whsec_…). Two are sent while a rotated-out secret is in its 24-hour grace period. Accept the request if any one matches.

Pattern: ^v1,[A-Za-z0-9+/]+={0,2}( v1,[A-Za-z0-9+/]+={0,2})*$
Kyc-Delivery-Id
string<uuid>
required

This delivery of the event to your endpoint, the same as meta.deliveryId. Quote it to KYC support when asking about a delivery. Not part of the signed content.

User-Agent
string
required

Identifies KYC webhook requests.

Allowed value: "KYCH-Webhooks/1.0"

Body

application/json

The body of every webhook request: the event in data, this delivery attempt in meta. Mirrors the API's { data, meta } success envelope. Ignore fields you don't recognise.

data
object
required

What happened. Identical, byte for byte, on every retry of the event.

meta
object
required

This delivery attempt. Changes on every retry and is not part of the event.

Response

Stop sending. KYC disables the endpoint at once and sends nothing more until it is re-enabled. Use this only when the endpoint is retired for good.