Layers
Partner APIAPI referenceWebhooks

GET /v1/webhook-endpoints/:endpointId/deliveries

Recent deliveries for an endpoint, newest first. Use for debugging and monitoring.

View as Markdown
GET/v1/webhook-endpoints/{endpointId}/deliveries
Phase 1stable
Auth
Bearer

Returns up to limit recent delivery attempts for this endpoint with attempt count, current status, last HTTP response, and error message. Payloads are omitted from the list response - call replay to receive the payload at your endpoint again.

Use this to:

  • See why an endpoint auto-paused (inspect lastErrorMessage / lastResponseStatus across recent rows).
  • Verify a delivery your handler doesn't have a record of.
  • Observe the retry ladder in action (a single eventId with multiple deliveries is a replay chain; a delivery with attempts > 1 is the automatic retry).
Path
  • endpointId
    string (UUID)required
Query
  • eventType
    stringoptional
    Filter to one event type.
  • status
    stringoptional
    One of `pending`, `delivering`, `delivered`, `failed`, `abandoned`.
  • cursor
    stringoptional
    Opaque cursor from previous response.
  • limit
    integeroptional
    Default 25, max 100.

Example

curl "https://api.layers.com/v1/webhook-endpoints/d4c71b62-.../deliveries?status=failed&limit=10" \
  -H "Authorization: Bearer $LAYERS_API_KEY"
200OK
{
  "items": [
    {
      "id": "9b8a41e2-0cc6-4c7a-9f89-1a7d19a1c233",
      "endpointId": "d4c71b62-7f08-4dc9-9d2c-8f7e2b9c4411",
      "eventId": "evt_01KPM7QZEC6NJF4XJTCZRR6S3N",
      "eventType": "job.completed",
      "status": "failed",
      "attempts": 8,
      "nextRetryAt": "2026-04-21T18:28:00.000Z",
      "deliveredAt": null,
      "abandonedAt": "2026-04-21T18:28:00.000Z",
      "lastResponseStatus": 502,
      "lastResponseAt": "2026-04-21T18:28:00.000Z",
      "lastErrorMessage": null,
      "createdAt": "2026-04-20T18:28:00.000Z"
    }
  ],
  "nextCursor": null
}

Errors

StatusCodeWhen
404NOT_FOUNDEndpoint not owned by the calling org.

See also

On this page