AgentMessage
Webhooks

List webhook delivery attempts

GET
/v1/webhooks/deliveries

Page over the per-attempt delivery feed for your organization-level webhooks.

Cursor pagination is ordered newest first; the next-page cursor surfaces in meta.next_cursor.

Filters combine with AND. since and until bound the time range. http_status_min and http_status_max bound the response code (a min greater than max returns 422). endpoint_id and event_type are exact matches; event_type is validated against the known event catalog, so a typo returns 422 rather than a silent empty page. outcome is one of success, retry, or dead.

Requires the webhooks:read scope.

AuthorizationBearer <token>

Authenticate by sending your API key as a bearer token: Authorization: Bearer am_live_.... Every request is automatically scoped to the organization that owns the key and to the scopes granted to that key.

In: header

Query Parameters

cursor?string
limit?integer
Default50
Range1 <= value <= 200
endpoint_id?string
Formatuuid
event_type?string
Value in"brand.vetted" | "brand.vetting_failed" | "campaign.approved" | "campaign.rejected" | "campaign.shared" | "wallet.balance_low" | "wallet.balance_zero" | "subscription.past_due" | "subscription.canceled" | "api_key.created" | "api_key.rotated" | "api_key.revoked" | "phone_number.bulk_order.completed" | "phone_number.campaign.assigned" | "consent_pending.confirmed" | "consent_pending.expired" | "lookup.completed"
outcome?string
Value in"success" | "retry" | "dead"
since?string
Formatdate-time
until?string
Formatdate-time
http_status_min?integer
Range100 <= value <= 599
http_status_max?integer
Range100 <= value <= 599

Response Body

application/json

application/json

application/json

application/json

curl -X GET "https://example.com/v1/webhooks/deliveries"
{
  "success": true,
  "data": [
    {
      "id": "0190a1b2-c3d4-e5f6-a7b8-c9d0e1f2a3d5",
      "endpoint_id": "0190a1b2-c3d4-e5f6-a7b8-c9d0e1f2a3b4",
      "event_id": "0190a1b2-c3d4-e5f6-a7b8-c9d0e1f2a3c5",
      "event_type": "wallet.balance_low",
      "url": "https://hooks.example.com/y3labs/ops",
      "attempt": 1,
      "outcome": "success",
      "response_status": 200,
      "response_time_ms": 142,
      "request_body_sha256": "f4e2…b7",
      "request_body_bytes": 312,
      "response_body_excerpt": "{\"ok\":true}",
      "request_headers": {
        "Content-Type": "application/json",
        "User-Agent": "AgentMessage/webhook-relay",
        "X-AmCore-Event-ID": "evt_018f2d0c-7a4c-7f3e-8f1f-3a2b9c1d2e0f",
        "X-AmCore-Event-Type": "wallet.balance_low",
        "X-AmCore-Signature": "t=1761480000,v1=19c2…cb5"
      },
      "error": null,
      "occurred_at": "2026-04-29T14:32:00Z"
    },
    {
      "id": "0190a1b2-c3d4-e5f6-a7b8-c9d0e1f2a3d4",
      "endpoint_id": "0190a1b2-c3d4-e5f6-a7b8-c9d0e1f2a3b4",
      "event_id": "0190a1b2-c3d4-e5f6-a7b8-c9d0e1f2a3c4",
      "event_type": "brand.vetted",
      "url": "https://hooks.example.com/y3labs/ops",
      "attempt": 2,
      "outcome": "retry",
      "response_status": 503,
      "response_time_ms": 502,
      "request_body_sha256": "9b1c…a3",
      "request_body_bytes": 248,
      "response_body_excerpt": "upstream timeout",
      "request_headers": {
        "Content-Type": "application/json",
        "User-Agent": "AgentMessage/webhook-relay",
        "X-AmCore-Event-ID": "evt_018f2d0c-7a4c-7f3e-8f1f-3a2b9c1d2e0e",
        "X-AmCore-Event-Type": "brand.vetted",
        "X-AmCore-Signature": "t=1761479940,v1=4ef1…0ab"
      },
      "error": null,
      "occurred_at": "2026-04-29T14:31:00Z"
    }
  ],
  "meta": {
    "total": 0,
    "limit": 50,
    "offset": 0,
    "next_cursor": "eyJ0cyI6IjIwMjYtMDQtMjlUMTQ6MzE6MDBaIiwiaWQiOiIwMUhYSlo0UTNBMFBaNFFINzdKWkw2UzBSM00ifQ=="
  }
}
{
  "success": false,
  "error": {
    "code": "UNAUTHORIZED",
    "message": "authentication failed",
    "request_id": "01JTBQH2FZ8K1RXC0WJ4Z9P3VM"
  }
}
{
  "success": false,
  "error": {
    "code": "FORBIDDEN",
    "message": "missing required scope",
    "request_id": "01JTBQH2FZ8K1RXC0WJ4Z9P3VM"
  }
}
{
  "success": false,
  "error": {
    "code": "VALIDATION_FAILED",
    "message": "validation failed",
    "request_id": "01JTBQH2FZ8K1RXC0WJ4Z9P3VM",
    "details": {
      "to": "must be E.164",
      "body": "must be 1..1600 chars"
    }
  }
}