Webhooks
Test message: ping
Event type: ping
How it is sent, signed and retried: Delivery and verification.
Sent once when you call testWebhook, to check that your endpoint receives and verifies messages. It is not retried.
webhook-id*stringThe message id. The same on every retry of the message, so use it to drop duplicates.
webhook-timestamp*stringUnix seconds when this attempt was signed.
Match
^[0-9]+$webhook-signature*stringv1, for each active secret, separated by a space. Two during the 24 hours after a secret rotation; accept the message if either matches.
The message body. Verify the signature against the raw bytes.
application/json- body
The body of a ping test message.
type*stringAlways ping.
timestamp*stringWhen the ping was made (ISO 8601, UTC).
Match
^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z))$Format
date-timedata*Which endpoint the ping is for.
Delivered. Any 2xx status, within 10 seconds. The response body is ignored.
Example Requests
POST/ping
application/json
{ "type": "ping", "timestamp": "2026-10-30T12:00:00.000Z", "data": { "app_id": "9b1d2f4e-7a3c-4c58-9e0b-6f3a1d2c4b5a", "webhook_id": "d8f0b2a4-6c1e-4d73-9a5b-1c3e5a7b9d46" }}{ "webhook-id": "string", "webhook-timestamp": "string", "webhook-signature": "string"}