> ## Documentation Index
> Fetch the complete documentation index at: https://docs.trypost.it/llms.txt
> Use this file to discover all available pages before exploring further.

# List webhook logs

> List delivery logs for a webhook, newest first, paginated 15 per page.

Requires **manage webhooks** permission (Owner / Admin). Other-workspace IDs return `404`.

Each item includes the signed payload and the response body (first 2,000 characters). Logs older than 7 days are pruned daily. Test pings (`webhook.test`) are not logged.

## Request

<ParamField path="webhook" type="string" required>
  The webhook UUID.
</ParamField>

<ParamField query="page" type="integer">
  Page number. Defaults to `1`.
</ParamField>

## Response

Laravel pagination envelope (`data`, `links`, `meta`). **15** per page. Use `page` to navigate.

<ResponseField name="data" type="array">
  <Expandable>
    <ResponseField name="id" type="string">
      Delivery log UUID. Same value as the envelope `id` on the original POST.
    </ResponseField>

    <ResponseField name="event_type" type="string">
      Event name, e.g. `post.published`.
    </ResponseField>

    <ResponseField name="payload" type="object">
      Full envelope that was posted: `id`, `type`, `data`, `created_at`.
    </ResponseField>

    <ResponseField name="response_status" type="integer">
      HTTP status from the receiver. `null` if no response.
    </ResponseField>

    <ResponseField name="response_body" type="string">
      Receiver body, truncated to 2,000 characters. `null` if none.
    </ResponseField>

    <ResponseField name="delivered_at" type="string">
      ISO 8601 timestamp of a successful `2xx`. `null` if not delivered.
    </ResponseField>

    <ResponseField name="failed_at" type="string">
      ISO 8601 timestamp of the last failed attempt. `null` if none.
    </ResponseField>

    <ResponseField name="attempts" type="integer">
      Delivery attempts for this log (up to 3).
    </ResponseField>

    <ResponseField name="created_at" type="string">
      ISO 8601 creation timestamp.
    </ResponseField>
  </Expandable>
</ResponseField>

<RequestExample>
  ```bash theme={null}
  curl -X GET "https://app.trypost.it/api/webhooks/a1b2c3d4-e5f6-7890-abcd-ef1234567890/logs?page=1" \
    -H "Authorization: Bearer YOUR_API_KEY"
  ```
</RequestExample>

<ResponseExample>
  ```json theme={null}
  {
    "data": [
      {
        "id": "b2c3d4e5-f6a7-8901-bcde-f12345678901",
        "event_type": "post.published",
        "payload": {
          "id": "b2c3d4e5-f6a7-8901-bcde-f12345678901",
          "type": "post.published",
          "data": {
            "id": "9f1a2b3c-4d5e-6f7a-8b9c-0d1e2f3a4b5c",
            "status": "published"
          },
          "created_at": "2026-09-04T15:04:05+00:00"
        },
        "response_status": 200,
        "response_body": "ok",
        "delivered_at": "2026-09-04T15:04:06+00:00",
        "failed_at": null,
        "attempts": 1,
        "created_at": "2026-09-04T15:04:05+00:00"
      }
    ],
    "links": {
      "first": "https://app.trypost.it/api/webhooks/a1b2c3d4-e5f6-7890-abcd-ef1234567890/logs?page=1",
      "last": "https://app.trypost.it/api/webhooks/a1b2c3d4-e5f6-7890-abcd-ef1234567890/logs?page=1",
      "prev": null,
      "next": null
    },
    "meta": {
      "current_page": 1,
      "from": 1,
      "to": 1,
      "last_page": 1,
      "per_page": 15,
      "total": 1,
      "path": "https://app.trypost.it/api/webhooks/a1b2c3d4-e5f6-7890-abcd-ef1234567890/logs"
    }
  }
  ```
</ResponseExample>
