Test a webhook with a sample event
POST
/v1/webhooks/{webhook_id}/test
const result = await bird.webhooks.test("whk_01krdgeqcxet5s7t44vh8rt9mg", {
event_type: "email.delivered",
});
console.log(result.status);result = client.webhooks.test(
"whk_01krdgeqcxet5s7t44vh8rt9mg",
event_type="email.delivered",
)
print(result.status)result, err := client.Webhooks.Test(context.Background(), "whk_123", bird.WebhooksTestParams{
EventType: "email.delivered",
})
if err != nil {
log.Fatal(err)
}
fmt.Println(result.Status)$result = $bird->webhooks->test(
'whk_01krdgeqcxet5s7t44vh8rt9mg',
(new WebhookTestRequest())->setEventType('email.delivered'),
);
echo $result->getStatus();bird webhooks test <webhook-id> --event-type email.deliveredcurl -X POST "https://us1.platform.bird.com/v1/webhooks/{webhook_id}/test" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"event_type": "email.delivered"
}'Antwort200
{
"status": "delivered",
"response_status_code": 200,
"response_body": "OK",
"response_duration_ms": 142,
"event_payload": {
"type": "domain.failed",
"timestamp": "2026-05-21T12:00:00Z",
"data": {
"domain_id": "dom_01krdgeqcxet5s7t44vh8rt9mg",
"domain": "mail.example.com",
"workspace_id": "ws_01krdgeqcxet5s7t44vh8rt9mg",
"failure_reason": "DKIM record not found at the expected selector."
}
},
"error": "connection refused"
}
Sends a signed synthetic event and returns whether your endpoint accepted it, its HTTP status, and the round-trip latency. An unreachable endpoint returns status: failed in the response body. The endpoint has 10 seconds to respond.
The body is a minimal JSON object with the event type, signed like a real delivery. It does not mirror that event's payload. Tests work on paused endpoints and do not appear in List delivery attempts.
The operation returns 412 if the endpoint lacks a valid signing secret or, when event_type is omitted, has no subscribed event type to use.
Parameter
webhook_id
string
ID of the webhook endpoint (whk_ prefix), as returned when it was created.
Anfrage-Nutzlast
event_type
string
Event type to simulate. Any type from the event catalog is accepted, whether or not the endpoint subscribes to it; an unknown type returns a 422. When omitted, the endpoint's first subscribed event type is used.
Antwort-Payload
status
string
erforderlich
Whether your endpoint accepted the test event. delivered means it returned a 2xx status; failed means it returned a non-2xx status or could not be reached (see error for the latter).
Possible values: delivered, failed
response_status_code
nullable integer
erforderlich
HTTP status returned by your endpoint. Null when no response was received (timeout, connection error, DNS failure).
response_body
string
Response body returned by your endpoint, truncated to the first 1024 bytes. Omitted when your endpoint returned no body or could not be reached.
response_duration_ms
integer
erforderlich
Round-trip delivery latency in milliseconds.
event_payload
object
The full event body delivered to your endpoint. Test sends use a minimal synthetic body rather than a full event payload, so this field is omitted.
Untergeordnete Attribute anzeigen
event_payload.type
string
erforderlich
Always whatsapp_suppression.created for this event.
Possible values: whatsapp_suppression.created
event_payload.timestamp
string
erforderlich
When the episode's opening statement took effect (effective_at).
event_payload.data
object
erforderlich
Payload of the whatsapp_suppression.created event.
Untergeordnete Attribute anzeigen
event_payload.data.suppression_id
string
erforderlich
The suppression episode that was opened.
event_payload.data.address
string
erforderlich
The suppressed WhatsApp address. For a phone number this is canonical E.164 with a leading plus sign, such as +5511977670804.
event_payload.data.waba
nullable string
erforderlich
The WhatsApp Business Account the suppression is limited to, identified by its WhatsApp-issued account ID, or null when it covers the whole workspace.
event_payload.data.reason
string
erforderlich
Why the address is suppressed. manual means it was added directly rather than created automatically from a delivery outcome. This list grows over time, so treat an unknown value as informational rather than rejecting the record.
Possible values (may grow over time): manual
event_payload.data.workspace_id
string
erforderlich
The workspace the suppression belongs to.
error
string
A short explanation of why the event could not be delivered. Present only when your endpoint could not be reached.