Webhooks
Webhooks allow your application to receive asynchronous updates about KYC lifecycle, customer resolution, flow publishing, and KYT pipeline events.
Configuration
Configure your Webhook endpoints in the Developers > Webhooks section of the Dashboard. You will need to provide:
- Callback URL: Where we send the
POSTrequest. - Events: Which events you want to subscribe to.
- Secret: Used for HMAC signature verification.
Event Structure
All events follow this standard envelope:
{
"id": "evt_unique_id",
"type": "event.type.name",
"occurredAt": "2024-02-13T12:00:00Z",
"companyId": "comp_123",
"data": { ... }, // Payload specific to the event
"version": "v1"
}
Supported Events
Common emitted event types are:
session.createdsession.completedcustomer.identifiedflow.version.publishedkyt.transaction.queuedkyt.transaction.reprocess.requestedkyt.transaction.pipeline.completedkyt.transaction.dead_lettered
For full payload samples and field descriptions, see Webhook Events Reference.
Security (HMAC Validation)
Verify the X-PredictAid-Signature header to ensure the request came from PredictaID.
- Preserve the raw JSON body exactly as received.
- Create an HMAC-SHA256 hash using your configured Webhook Secret.
- Compare the result with the header.
Additional headers sent with each webhook request:
X-PredictAid-Event-ID: unique event identifier.X-PredictAid-Signature: HMAC-SHA256 signature.User-Agent:PredictAid-Webhook-Dispatcher/1.0.
Webhook handlers should return a 2xx response after durable receipt. Process duplicate events idempotently by event ID because network retries can happen.
Node.js Example
const crypto = require('crypto');
function verify(payload, secret, signature) {
const hash = crypto
.createHmac('sha256', secret)
.update(JSON.stringify(payload))
.digest('hex');
return hash === signature;
}
In production frameworks, prefer validating against the raw request body captured before JSON parsing whenever possible.
Delivery Behavior
PredictaID sends each event as an HTTP POST with Content-Type: application/json. Your endpoint should respond quickly and queue longer processing internally.
Recommended handler behavior:
- Reject events with invalid signatures.
- Store
X-PredictAid-Event-IDbefore processing. - Treat duplicate event IDs as already received.
- Return
2xxonly when the event is durably stored or safely queued. - Log request ID, event ID, aggregate ID, and event type without logging sensitive personal data.