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.

Header Parameters

webhook-id*string

The message id. The same on every retry of the message, so use it to drop duplicates.

webhook-timestamp*string

Unix seconds when this attempt was signed.

Match^[0-9]+$
webhook-signature*string

v1, for each active secret, separated by a space. Two during the 24 hours after a secret rotation; accept the message if either matches.

Request Body

The message body. Verify the signature against the raw bytes.

application/json
  1. body

The body of a ping test message.

type*string

Always ping.

timestamp*string

When 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))$
Formatdate-time
data*

Which endpoint the ping is for.

Response Body

Delivered. Any 2xx status, within 10 seconds. The response body is ignored.

Example Requests
POST/ping
Request Body
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"  }}
Header Parameters
{  "webhook-id": "string",  "webhook-timestamp": "string",  "webhook-signature": "string"}