API / list-origin-webhook-deliveries-via-api

API

List Origin webhook deliveries via the API

List webhook deliveries for the authenticated app with GET https://api.cursor.com/v1/origin/app/webhook/deliveries, newest first. Official reference: Origin API → List Webhook Deliveries.

Origin is in Early Beta and subject to change. Authenticate with an app JWT. A delivery is one event owed to one app; its id is the webhook-id header value the receiver sees — use it as the idempotency key. Availability: Early Beta per the API overview.

Deliveries are listable for seven days after creation, and only while your app has an active installation in the delivery's namespace. App-targeted lifecycle events such as installation.deleted stay visible after the uninstall they describe.

delivered=false is the recovery predicate: it selects every delivery that has never received a 2xx, including deliveries whose retry ladder ran out during an outage. Prefer that server-side filter over a caller-supplied time window when recovering missed events.

Query parameters

Param Required Meaning
delivered no Compares against deliveredAt. delivered=false selects undelivered deliveries for recovery.
eventType no Exact event type, e.g. pull_request.created.
installationId no Narrow to one installation.
createdAfter no Bound creation time (browsing, not recovery).
createdBefore no Bound creation time (browsing, not recovery).
pageSize no Defaults to 30 when unset or 0. Values above 100 are clamped to 100.
pageToken no Opaque cursor from a previous nextPageToken.
curl --request GET \
  --url 'https://api.cursor.com/v1/origin/app/webhook/deliveries?delivered=false&pageSize=50' \
  --header 'Authorization: Bearer YOUR_APP_JWT'

Response fields

Field Meaning
deliveries Webhook deliveries, newest first.
deliveries[].id Stable delivery ID and the webhook-id the receiver saw.
deliveries[].event.id Underlying Origin event identifier (not the idempotency key).
deliveries[].event.type Event slug for routing.
deliveries[].installation.id Current active installation for the target owner; unset when none exists (possible for app-targeted lifecycle events after uninstall).
deliveries[].installation.target Owner targeted by the installation.
deliveries[].createdAt Delivery creation timestamp.
deliveries[].deliveredAt Set when the receiver acknowledged with 2xx. Absence corresponds to delivered=false.
deliveries[].lastAttempt Most recent HTTP attempt: status, latency, transport error, trigger (automatic or manual), and time.
nextPageToken Opaque cursor for the next page; empty when done.

Example:

{
  "deliveries": [
    {
      "id": "whd_01k2ja2000e0080000000000j9",
      "event": {
        "id": "evt_01k2ja2000e0080000000000r5",
        "type": "pull_request.created"
      },
      "installation": {
        "id": "inst_01k2ja2000e0080000000000b2",
        "target": {
          "slug": "acme",
          "id": "ns_01k2ja2000e0080000000000p3",
          "type": "team"
        }
      },
      "createdAt": "2026-08-01T09:30:00Z",
      "deliveredAt": "2026-08-02T14:45:05Z",
      "lastAttempt": {
        "id": "wha_01k2ja2000e0080000000000k0",
        "deliveryId": "whd_01k2ja2000e0080000000000j9",
        "trigger": "automatic",
        "responseStatusCode": 200,
        "latencyMs": 182,
        "attemptedAt": "2026-08-02T14:45:05Z"
      }
    }
  ]
}

Verify webhook signatures against the raw request body before parsing. Deduplicate with webhook-id and process asynchronously after returning 2xx.

To resend failed deliveries, use Batch Redeliver Webhook Deliveries. To verify a receiver during setup without waiting for a real event, use Ping Webhook.

Base URL: https://api.cursor.com/v1/origin.