Test event
Signed per the Standard Webhooks specification. Verify with an official Standard Webhooks library and the endpoint's whsec_ signing secret: it checks Base64(HMAC-SHA256(Base64-decoded secret, webhook-id + '.' + webhook-timestamp + '.' + raw_body)) against each v1 entry in webhook-signature in constant time and rejects timestamps more than five minutes from now. Deduplicate by webhook-id. Redelivery preserves the body and webhook-id and signs again with a new timestamp.
VizoAPI sends this request to the webhook endpoint you create in the console.
Request headers
| Field | Description |
|---|---|
| webhook-idstringRequired | Unique event ID, equal to event_id in the body. Unchanged on retries and redelivery; use it to deduplicate. |
| webhook-timestampstringRequired | Unix time in seconds when this attempt was sent. |
| webhook-signaturestringRequired | Space-delimited list of v1 signatures. Two are sent for 24 hours after a secret rotation; accept the request if any one matches. |
Request body
A JSON object. Fields that are not listed are rejected.
| Field | Description |
|---|---|
| created_atdate-timeRequired | |
| event_idstringRequired | |
| testbooleanRequired | |
| typestringRequired | webhook.test |
Responses
2XX Delivery accepted
Request example
cURL
# Your endpoint receives a POST signed per Standard Webhooks. Replay one locally to test your handler:
curl -X POST "$YOUR_WEBHOOK_URL" \
-H "Content-Type: application/json" \
-H "webhook-id: $EVENT_ID" \
-H "webhook-timestamp: $TIMESTAMP" \
-H "webhook-signature: v1,$SIGNATURE" \
--data-binary @event.jsonPython
# pip install standardwebhooks
from standardwebhooks import Webhook, WebhookVerificationError
wh = Webhook("whsec_...") # your endpoint's signing secret
def verify(headers, raw_body: bytes):
try:
return wh.verify(raw_body, headers) # returns the parsed event
except WebhookVerificationError:
return NoneNode.js
// npm install standardwebhooks
import { Webhook } from "standardwebhooks";
const wh = new Webhook(process.env.WEBHOOK_SECRET); // whsec_...
// rawBody is a Buffer of the request body as received, e.g. express.raw({ type: "application/json" }).
export function verify(headers, rawBody) {
try {
return wh.verify(rawBody, headers); // returns the parsed event
} catch {
return null;
}
}{
"created_at": "2026-11-02T08:01:43Z",
"event_id": "string",
"test": false,
"type": "webhook.test"
}