Test delivery to your endpoint
Sent synchronously by POST /v1/webhook_endpoints/{id}/test, signed exactly like a real event. Not part of the business event feed. The attempt is recorded in delivery history; it is a connection check between Roster and your receiver.
Headers
- Type: stringRoster
- Signature requiredt={unix_seconds},v1={hmac_sha256("{t}.{body}", secret)}, keyed with the wholewhsec_secret as UTF-8 — reject atmore than 300 seconds away from your clock, in either direction. The header carries onetand one or morev1, comma-separated: today exactly one, and you accept the delivery when anyv1matches, so a delivery signed with more than one secret (for example during a secret rotation) still verifies. - Type: stringRoster
- Webhook - Endpoint requiredId of the endpoint this delivery was sent to (
we_...), asPOST /v1/webhook_endpointsreturned it. It is not a secret, and it is not covered byRoster-Signature: use it to pick that endpoint's secret, and trust it only after the signature verifies with that secret.
Body
- Type: stringevent
_id requiredUnique identifier of this notice. If it arrives again with the same identifier, do not count it as a new change.
- event
_type const:webhook.testrequiredKind of change reported by this notice.
- Type: booleanlivemoderequired
truewhen the test was sent from production (sk_live_keys),falsewhen it was sent from the sandbox (sk_test_keys), as on every event. - Type: stringFormat: date-timeoccurred
_at requiredDate and time the reported change happened, in UTC.
- Type: objectpayloadrequiredProperties: 1
Fields describing the change. The contents depend on the kind of notice.
Responses
- 200
Return any 2xx to acknowledge the delivery.
{
"event_id": "",
"event_type": "webhook.test",
"occurred_at": "",
"livemode": true,
"payload": {
"message": "Roster webhook test delivery"
}
}