# List webhook deliveries

Source: https://docs.vlayers.ai/reference/webhooks/list-webhook-deliveries

`GET /v1/webhooks/deliveries` · scope `webhooks:manage`

Returns recent deliveries, newest first, with each attempt's status code and latency (never your response body). Use it to debug a receiver: a failed delivery is retried up to 5 times, then marked `failed`.

Requires an API key with the `webhooks:manage` scope.

| Name | In | Type | Required | Description |
|---|---|---|---|---|
| `subscriptionId` | query | string | no | Only deliveries to this subscription. Example: `"0192f5a7-3c4d-7e5f-8a6b-7c8d9e0f1a23"` |
| `type` | query | string | no | Only deliveries of this event type. Example: `"message.received"` |
| `status` | query | "pending" \| "in_flight" \| "delivered" \| "failed" | no | `pending`, `in_flight`, `delivered` or `failed`. Example: `"failed"` |
| `since` | query | string | no | Only deliveries created at or after this time (ISO 8601). Example: `"2026-10-20T00:00:00.000Z"` |
| `until` | query | string | no | Only deliveries created before this time (ISO 8601). Example: `"2026-10-21T00:00:00.000Z"` |
| `limit` | query | string | no | How many items to return, 1–200. Default 50. Example: `20` |

## Request

cURL:

```bash
curl "https://api.vlayers.ai/v1/webhooks/deliveries?status=failed&limit=20" \
  -H "Authorization: Bearer $VOICELAYER_API_KEY"
```

TypeScript:

```ts
import { createVoiceLayerClient, listWebhookDeliveries } from '@voicelayer/api';

const client = createVoiceLayerClient({ apiKey: process.env.VOICELAYER_API_KEY!, throwOnError: true });

const { data } = await listWebhookDeliveries({
  client,
  query: {
    status: 'failed',
    limit: '20'
  }
});
console.log(data.deliveries);
```

Python:

```python
import os
import voicelayer

config = voicelayer.Configuration(access_token=os.environ["VOICELAYER_API_KEY"])
with voicelayer.ApiClient(config) as client:
    api = voicelayer.WebhooksApi(client)
    result = api.list_webhook_deliveries(
        status="failed",
        limit="20",
    )
    print(result.deliveries)
```

## Response `200`

```json
{
  "deliveries": [
    {
      "id": "0192f5b3-4d5e-7f6a-9b7c-8d9e0f1a2b34",
      "subscriptionId": "0192f5a7-3c4d-7e5f-8a6b-7c8d9e0f1a23",
      "projectId": "0192f5a1-5e6f-7a7b-8c8d-9e0f1a2b3c45",
      "eventType": "message.received",
      "eventId": "0192f5b1-0a1b-7c2d-8e3f-4a5b6c7d8e90",
      "payload": {
        "id": "0192f5b1-0a1b-7c2d-8e3f-4a5b6c7d8e90",
        "type": "message.received",
        "createdAt": "2026-10-20T15:04:05.000Z",
        "data": {}
      },
      "status": "delivered",
      "attempts": 1,
      "maxAttempts": 5,
      "lastStatusCode": 200,
      "lastError": null,
      "nextAttemptAt": "2026-10-20T15:04:05.000Z",
      "deliveredAt": "2026-10-20T15:04:05.000Z",
      "createdAt": "2026-10-20T15:04:05.000Z",
      "updatedAt": "2026-10-20T15:04:05.000Z",
      "attemptLog": [
        {
          "attempt": 1,
          "at": "2026-10-20T15:04:05.000Z",
          "statusCode": 200,
          "errorCode": null,
          "latencyMs": 182
        }
      ]
    }
  ]
}
```
