---
title: "Read events (pull)"
method: GET
path: "/webhooks/{id}/events"
tags: ["Webhooks"]
---

# Read events (pull)

`GET /webhooks/{id}/events`

## Request

- Base URL: `https://yungle.co/api/v1`
- URL: `https://yungle.co/api/v1/webhooks/{id}/events`
- Auth: HTTP bearer

Oldest first, after `cursor`. `nextCursor` is returned even on the last page, so a poller resumes from it. Kept 30 days.

## Query parameters

- `limit` integer
- `cursor` string

## Response `200`

Events, each the same JSON a push delivery sends, plus `deliveryId`.

- object
  - `events` WebhookEvent[], required
    - `deliveryId` string, required: Pass the last one back as `cursor`.
    - `id` string, required
    - `type` string, required
    - `createdAt` string, date-time, required
    - `data` object, required: Shaped per event type; see the Webhooks guide.
  - `nextCursor` string, nullable, required: Returned even on the last page, so a poller resumes from it.
  - `hasMore` boolean, required

## Other responses

- `401`: Missing or invalid credential. Codes: `unauthorized`.
- `402`: Needs a paid plan, or prepaid credit for metered usage. Codes: `upgrade_required`, `out_of_credit`.
- `403`: The credential lacks a required scope, or a shared link refused access. Codes: `insufficient_scope`, `password_required`, `wrong_password`, `guests_only`.
- `404`: No such resource in this workspace. Codes: `not_found`.
- `429`: Rate limit or email budget exhausted. Wait for `Retry-After`. Codes: `rate_limited`, `email_budget_exhausted`.
- `500`: Our fault. `details.requestId` ties it to our logs. Codes: `internal_error`.

---

[API](https://skmtc.dev/yungle/apis/yungle-api.md) · [All operations](https://skmtc.dev/yungle/apis/yungle-api/llms.txt) · [OpenAPI document](https://skmtc.dev/yungle/apis/yungle-api/revisions/fee7cb2d7419?raw)
