> ## 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.

# Replay multiple webhook events in one request (operator tooling).

> Replay result (or preview when dry_run)

### Path parameters

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

### Query parameters

<ParamField query="limit" type="integer (int32)">
  Max events to replay (1-200), default 50
</ParamField>

<ParamField query="state" type="string">
  Filter by processing state (default failed)
</ParamField>

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

<ParamField query="topic" type="string">
  Filter by exact topic
</ParamField>

<ParamField query="topic_prefix" type="string">
  Filter by topic prefix
</ParamField>

<ParamField query="shopify_order_id" type="string">
  Filter by Shopify order id
</ParamField>

<ParamField query="dry_run" type="boolean">
  Preview replay candidates without queueing
</ParamField>

<ParamField query="max_per_source" type="integer (int32)">
  Optional cap per source (1-200)
</ParamField>

### Response

`object`

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

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

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

<ResponseField name="dryRun" type="boolean" required />

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

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

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

<ResponseField name="selectedBySource" type="object">
  Selected count per source (omitted when empty)
</ResponseField>

<ResponseField name="webhookIds" type="string (uuid)[]" required />

<ResponseField name="errors" type="object[]">
  Omitted when empty

  <Expandable title="errors">
    <ResponseField name="webhookId" type="string (uuid)" required />

    <ResponseField name="message" type="string" required />
  </Expandable>
</ResponseField>

### Status codes

| Code  | Meaning                                   |
| ----- | ----------------------------------------- |
| `202` | Replay result (or preview when `dry_run`) |
| `401` | Unauthorized                              |
| `404` | Tenant not found                          |
| `422` | Invalid replay filter                     |

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

<ResponseExample>
  ```json 202 theme={null}
  {
    "requestedLimit": 1,
    "matched": 1,
    "selected": 1,
    "dryRun": false,
    "queued": 1,
    "skipped": 1,
    "skippedBySourceCap": 1,
    "selectedBySource": {},
    "webhookIds": [
      "3fa85f64-5717-4562-b3fc-2c963f66afa6"
    ],
    "errors": [
      {
        "webhookId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
        "message": "Two-person tent, green — replacement for damaged pole set."
      }
    ]
  }
  ```
</ResponseExample>
