Identification scored
Sent when an identification is complete. The Risk Score describes this identification. Verify HMAC-SHA256 over the exact raw body using the endpoint secret. Deduplicate by the signed event_id. Acknowledge durable acceptance with 2xx within the delivery timeout. Retries preserve the body and ID. Use History for the latest stored result. See https://docs.shieldlabs.ai/setup/webhooks for delivery and signature handling.
Headers
sha256= followed by the lowercase hex HMAC-SHA256 of the raw request body:
- key: your endpoint's signing secret as UTF-8 bytes, the whsec_ prefix included (not hex- or base64-decoded, not stripped);
- message: the exact bytes of the body as received.
Compare it with your own digest in constant time, before parsing the JSON. The example values are the signatures of the example bodies (in their compact form as sent) with the test secret whsec_00112233445566778899aabbccddeeff.
Convenience mirror of the signed body event_id. Trust the body after signature verification. Retries preserve the logical event ID.
Payload
Example payload
{
"created_at": "2026-09-30T12:34:57.482913041Z",
"data": {
"identification_id": "a5b7c9d1-e3f5-4a7b-9c1d-3e5f7a9b1c3d",
"visitor_id": "e9f1a3b5-c7d9-4e1f-8a3b-5c7d9e1f3a5b",
"device_id": "d8e0f2a4-b6c8-4d0e-bf2a-4b6c8d0e2f4a",
"session_id": "b6c8d0e2-f4a6-4b8c-8d0e-2f4a6b8c0d2e",
"cookie_id": "c7d9e1f3-a5b7-4c9d-ae1f-3a5b7c9d1e3f",
"user_hid": "9f86d081884c7d659a2feaa0c55ad015",
"domain": "example.com",
"public_ip": {
"ip": "203.0.113.24",
"country": "Netherlands"
},
"local_ip": {
"ip": "203.0.113.24",
"country": "Netherlands"
},
"connection_type": "direct",
"os": "Windows",
"browser": "Chrome",
"device_type": "desktop",
"traffic_source": {
"channel": "Google Ads",
"referrer_domain": "google.com",
"landing_url": "https://shop.example.com/signup?utm_source=google&utm_medium=cpc&gclid=abc123",
"click_id_type": "gclid",
"utm_source": "google",
"utm_medium": "cpc",
"utm_campaign": "spring_launch"
},
"signals": [
{
"name": "proxy"
}
],
"observed_at": "2026-09-30T12:34:57.482913041Z",
"hre": {
"account_sharing": {
"status": "evaluated",
"level": "medium"
},
"account_takeover": {
"status": "evaluated",
"level": "medium"
},
"impossible_travel": {
"status": "evaluated",
"level": "medium"
}
}
}
}Response
Delivery accepted. The response body is ignored.
Changes
Webhooks have no change history: a webhook is keyed by its event name rather than a path and method, so no recorded change can name it.