Skip to main content
GET
Inspect a webhook endpoint
recentDeliveries is newest-first and includes failures, the response status and a short response snippet, so a broken receiver can be diagnosed without server-side logs. An endpoint auto-disables after 8 consecutive failed attempts; re-enable it with PATCH {"disabled": false} once the receiver is healthy.

Authorization

This route requires the read 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

  • recentDeliveries is your debugging surface. It is newest first and includes failures, the response status and a short response snippet.
  • An endpoint auto-disables after 8 consecutive failed attempts. Bring it back with PATCH {"disabled": false} once the receiver is healthy.

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.

Query Parameters

deliveries
integer | null

How many recent delivery attempts to return (default 20, max 100).

Response

Successful Response

GET /v1/webhooks/{id}: the endpoint plus its recent delivery tail.

consecutiveFailures
integer
required
createdAt
string<date-time>
required
disabled
boolean
required
eventTypes
string[]
required
id
string
required
url
string
required
disabledReason
string | null
inactiveEventTypes
string[]

Subscribed event types that no emitter publishes yet, so nothing will be delivered for them. The subscription is kept and starts delivering as soon as the emitter ships; this field exists so you never wait on an event silently.

lastDeliveryAt
string<date-time> | null
lastSuccessAt
string<date-time> | null
recentDeliveries
WebhookDelivery · object[]
updatedAt
string<date-time> | null