# Recent deliveries

`GET /v1/webhooks/{id}/deliveries`

Lists a webhook's latest deliveries (up to **100**, kept 90 days) with each one's status, attempts and your endpoint's last response, **free**.

- **Auth:** API key ([Authentication](https://installgraph.com/docs/authentication.md))
- **Scope:** `events:read`
- **Cost:** Free.

Use it to debug your endpoint: `lastStatus` and `lastError` show what it answered, and `nextAttemptAt` when we will retry.

The webhook's latest deliveries, newest first, kept 90 days. Free. Scope `events:read`.

## Request

```bash
curl "https://api.installgraph.com/v1/webhooks/6731b2e4c9a1f20d8e4b7c15/deliveries?limit=1" \
  -H "Authorization: Bearer $INSTALLGRAPH_API_KEY"
```

### Path parameters

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `id` | string | Yes |  |

### Query parameters

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `limit` | integer | No | 1–100. Default `50`. |

## Response

`200`. The example's stores are fictional.

```json
{
  "data": [
    {
      "id": "6733d1a07be42c19f5a8e301",
      "eventId": "evt_6720a4c3f1b2",
      "type": "removed",
      "domain": "example.com",
      "status": "delivered",
      "attempts": 1,
      "lastStatus": 204,
      "lastError": null,
      "credits": 10,
      "refunded": false,
      "createdAt": "2026-11-12T04:21:05.000Z",
      "lastAttemptAt": "2026-11-12T04:21:07.000Z",
      "nextAttemptAt": null,
      "deliveredAt": "2026-11-12T04:21:07.000Z"
    }
  ],
  "meta": {
    "requestId": "6f1c2a9e-4b7d-4e2a-9c51-0d3b8e7f2a14",
    "creditsUsed": 0,
    "creditsCharged": 0,
    "creditsRemaining": 2480,
    "freeRepulls": 0
  }
}
```

### Fields

| Field | Type | Description |
| --- | --- | --- |
| `data[].id` | string | The payload's `id` and the `Installgraph-Webhook-Id` header. |
| `data[].eventId` | string | The event's id in `GET /v1/events`. |
| `data[].type` | string | One of `installed`, `removed`. |
| `data[].domain` | string |  |
| `data[].status` | string | `failed`: every retry failed (refunded). `expired`: your balance did not cover it within 7 days (never charged). `cancelled`: the webhook was deleted or disabled first. One of `pending`, `awaiting_credits`, `delivered`, `failed`, `expired`, `cancelled`. |
| `data[].attempts` | integer |  |
| `data[].lastStatus` | integer \| null | Your endpoint's HTTP status on the last attempt. |
| `data[].lastError` | string \| null |  |
| `data[].credits` | integer |  |
| `data[].refunded` | boolean |  |
| `data[].createdAt` | string (date-time) |  |
| `data[].lastAttemptAt` | string (date-time) \| null |  |
| `data[].nextAttemptAt` | string (date-time) \| null |  |
| `data[].deliveredAt` | string (date-time) \| null |  |

Every keyed response also carries `meta` (`requestId`, `creditsUsed`, `creditsRemaining`, `freeRepulls`) and the `X-Credits-*` and `X-RateLimit-*` headers. See [Credits](https://installgraph.com/docs/credits.md) and [Rate limits](https://installgraph.com/docs/rate-limits.md).

## Errors

| Status | Code | Meaning | What to do |
| --- | --- | --- | --- |
| 400 | `invalid_request` | A parameter or body field is missing or malformed. | Fix the request; `message` names the field. Do not retry unchanged. |
| 404 | `not_found` | No such endpoint, app, or store (or not scanned yet). | Check the slug or domain. Store 404s are free within the lookup-miss allowance. |

All codes: [Errors](https://installgraph.com/docs/errors.md).
