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

# List webhook events for a tenant (most recent first).

> Webhook events page

### Path parameters

<ParamField path="tenant_id" type="string" required>
  Tenant identifier
</ParamField>

### Query parameters

<ParamField query="page" type="integer (int32)">
  Page number (1-indexed)
</ParamField>

<ParamField query="page_size" type="integer (int32)">
  Items per page (max 100)
</ParamField>

<ParamField query="state" type="string">
  Filter by processing state (queued, running, succeeded, failed)
</ParamField>

<ParamField query="source" type="string">
  Filter by webhook source (e.g. shopify, acp)
</ParamField>

<ParamField query="topic" type="string">
  Filter by exact topic (e.g. orders/create)
</ParamField>

<ParamField query="topic_prefix" type="string">
  Filter by topic prefix (e.g. orders/)
</ParamField>

<ParamField query="shopify_order_id" type="string">
  Filter by Shopify order id (Shopify webhooks only)
</ParamField>

### Response

`object`

<ResponseField name="items" type="object[]" required>
  The items on this page

  <Expandable title="items">
    <ResponseField name="id" type="string (uuid)" required />

    <ResponseField name="tenantId" type="string" required />

    <ResponseField name="source" type="string" required />

    <ResponseField name="topic" type="string" required />

    <ResponseField name="shopifyOrderId" type="string" />

    <ResponseField name="shopifyOrderName" type="string" />

    <ResponseField name="receivedAt" type="string (date-time)" required />

    <ResponseField name="signatureValid" type="boolean" />

    <ResponseField name="signatureError" type="string" />

    <ResponseField name="state" type="string" required>
      Webhook processing state
    </ResponseField>

    <ResponseField name="attemptCount" type="integer" required />

    <ResponseField name="maxAttempts" type="integer" required />

    <ResponseField name="lastAttemptAt" type="string (date-time)" />

    <ResponseField name="nextRetryAt" type="string (date-time)" />

    <ResponseField name="processingStartedAt" type="string (date-time)" />

    <ResponseField name="processingFinishedAt" type="string (date-time)" />

    <ResponseField name="processingError" type="string" />
  </Expandable>
</ResponseField>

<ResponseField name="pagination" type="object" required>
  Pagination metadata

  <Expandable title="pagination">
    <ResponseField name="page" type="integer" required>
      Current page number
    </ResponseField>

    <ResponseField name="pageSize" type="integer" required>
      Number of items per page
    </ResponseField>

    <ResponseField name="totalItems" type="integer">
      Total number of items across all pages
    </ResponseField>

    <ResponseField name="totalPages" type="integer">
      Total number of pages
    </ResponseField>

    <ResponseField name="hasNext" type="boolean" required>
      Whether there is a next page
    </ResponseField>

    <ResponseField name="hasPrevious" type="boolean" required>
      Whether there is a previous page
    </ResponseField>
  </Expandable>
</ResponseField>

### Status codes

| Code  | Meaning             |
| ----- | ------------------- |
| `200` | Webhook events page |
| `401` | Unauthorized        |
| `404` | Tenant not found    |

<RequestExample>
  ```bash cURL theme={null}
  curl --request GET \
    --url 'https://api.sync.stateset.com/v1/tenants/{tenant_id}/webhook-events' \
    --header 'x-stateset-api-key: YOUR_API_KEY'
  ```
</RequestExample>

<ResponseExample>
  ```json 200 theme={null}
  {
    "items": [
      {
        "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
        "tenantId": "acme-outdoors",
        "source": "string",
        "topic": "string",
        "shopifyOrderId": "string",
        "shopifyOrderName": "string",
        "receivedAt": "2026-08-31T14:22:05Z",
        "signatureValid": true,
        "signatureError": "string",
        "state": "queued",
        "attemptCount": 1,
        "maxAttempts": 1,
        "lastAttemptAt": "2026-08-31T14:22:05Z",
        "nextRetryAt": "2026-08-31T14:22:05Z",
        "processingStartedAt": "2026-08-31T14:22:05Z",
        "processingFinishedAt": "2026-08-31T14:22:05Z",
        "processingError": "string"
      }
    ],
    "pagination": {
      "page": 1,
      "pageSize": 20,
      "totalItems": 1,
      "totalPages": 1,
      "hasNext": true,
      "hasPrevious": true
    }
  }
  ```
</ResponseExample>
