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"
}'Resposta200
{
"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.
Parâmetros
webhook_id
string
ID of the webhook endpoint (whk_ prefix), as returned when it was created.
Corpo da requisição
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.
Payload de resposta
status
string
obrigatório
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
obrigatório
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
obrigatório
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.
Mostrar atributos secundários
event_payload.type
string
obrigatório
Always whatsapp_suppression.created for this event.
Possible values: whatsapp_suppression.created
event_payload.timestamp
string
obrigatório
When the episode's opening statement took effect (effective_at).
event_payload.data
object
obrigatório
Payload of the whatsapp_suppression.created event.
Mostrar atributos secundários
event_payload.data.suppression_id
string
obrigatório
The suppression episode that was opened.
event_payload.data.address
string
obrigatório
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
obrigatório
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
obrigatório
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
obrigatório
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.
Related resources
Continue with the documentation, guides and examples for this topic. Resources are in English.
Watch the guideWebhooks done right: reliable delivery eventsUnderstand the conceptHow do I verify a webhook signature?Follow the learning pathOperate messaging reliablyImplementation guideWebhooks & events
Try the practice and get an implementation brief