Skip to main content
POST
Send a test event to a webhook endpoint
Send a signed webhook.test event now and return the result inline. Use this to verify signature verification end to end before relying on real events. The attempt is recorded in the endpoint’s delivery log but is purely diagnostic: it never counts toward the failure streak, never auto-disables the endpoint and is never retried. A receiver that rejects the event still returns 200 here with ok: false and the status code it responded with, because the CALL succeeded even though the DELIVERY did not; a disabled endpoint is still testable.

Authorization

This route requires the write scope. A missing or invalid credential returns 401 authentication_error. A valid credential without the scope returns 403 permission_denied, and the problem body names the exact scope required.

Headers

These are request conventions the contract does not declare as parameters, so they do not appear in the schema tables below.

Success responses

Errors

Every error is an RFC 9457 application/problem+json body carrying a stable code, a requestId, and a suggestedAction where Exo has one. See Errors.

Notes

  • A test never counts against the endpoint. It is recorded in the delivery log but never contributes to the failure streak, never auto-disables and is never retried.
  • A receiver that rejects the event still returns 200 here, with ok: false and the status it responded with, because the call succeeded even though the delivery did not.

Authorizations

X-Exo-API-Key
string
header
required

An Exo API key (exo_...) sent as the X-Exo-API-Key header.

Path Parameters

webhook_id
string<uuid>
required

The webhook endpoint id returned at registration.

Response

Successful Response

POST /v1/webhooks/{id}/test: the delivery outcome, inline.

attempt
integer
required
deliveryId
string
required
eventType
string
required
ok
boolean
required
webhookId
string
required
attemptedAt
string<date-time> | null
durationMs
integer | null
error
string | null
responseSnippet
string | null
statusCode
integer | null