> **Building with AI coding agents?** Install the authstack plugin with one command. This equips your agent with accurate Scalekit implementation patterns.
>
> **Recommended** (the `-y` flags skip prompts, so the command runs without an interactive terminal):
> ```bash
> npx -y @scalekit-inc/cli setup -y
> ```
>
> Global:
> ```bash
> npm install -g @scalekit-inc/cli
> scalekit setup -y
> ```
>
> Supports Claude Code, Cursor, GitHub Copilot, Codex + skills for other Agent Skills-compatible agents in `~/.agents/skills`.
> Skills: integrate-agentkit, implement-saaskit, add-mcp-oauth, implement-sso, implement-scim.
> [Full setup guide](https://docs.scalekit.com/dev-kit/build-with-ai/)

---

# List deliveries (beta)

`GET /api/v1/trigger-delivery/endpoints/{endpoint_id}/deliveries`

This endpoint is in beta. Its request and response may change.

Lists the trigger events sent to one of your delivery endpoints, newest first, one entry per event however many attempts it took. Filter by `status`, by `channel` (a connection or subscription ID) and by time with `after` and `before`. Deliveries are kept for 90 days. Pass `next_page_token` as `page_token` to read older ones. The event's payload isn't returned.

**Path parameters**

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `endpoint_id` | string | Yes | ID of your delivery endpoint (`ep_...`), the URL on your server that you added under **Developers** > **Trigger Delivery**. [Look up a delivery](https://docs.scalekit.com/agentkit/reference/triggers/look-up-a-delivery/) returns it as `endpoint_id` on each attempt. |

**Query parameters**

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `after` | string | No | Only deliveries of events created after this instant. Omit it to read back to the oldest retained delivery. Deliveries are kept for 90 days, so a value earlier than that is moved forward to the start of the retained window. Refused when later than `before`. Read to the second. |
| `before` | string | No | Only deliveries of events created before this instant. Omit it to start from the newest delivery. A value later than the current time is treated as the current time. With `after`, reads a time range; the list stays newest first within it. Read to the second. |
| `channel` | string | No | Narrows the list to deliveries of events from one connection (a `conn_` ID) or one trigger subscription (a `trgs_` ID). The ID must exist in this environment; any other value is refused with 400. At most 64 characters. |
| `page_size` | integer | No | Maximum number of deliveries to return, newest first. Defaults to 20 when omitted or zero; a larger value than 100 is capped at 100 rather than refused. |
| `page_token` | string | No | The next_page_token from a previous response, to read the next page of older deliveries. Omit it to read the newest page. A token is bound to the environment, the endpoint and the filters it was issued with: a token sent with a different endpoint or different filters is refused rather than mixing two result sets. At most 1024 characters. |
| `status` | string (enum) | No | Narrows the list to deliveries in this state. Omit it, or send TRIGGER_DELIVERY_STATUS_UNSPECIFIED, for every state. - TRIGGER_DELIVERY_STATUS_DELIVERED: An attempt succeeded. No further attempt is made. - TRIGGER_DELIVERY_STATUS_PENDING: Accepted for delivery; no attempt has finished yet. - TRIGGER_DELIVERY_STATUS_FAILED: Every scheduled attempt failed. No further attempt is made unless one is started by hand. - TRIGGER_DELIVERY_STATUS_RETRYING: An attempt failed and another is scheduled, at next_attempt_at. One of: `TRIGGER_DELIVERY_STATUS_DELIVERED`, `TRIGGER_DELIVERY_STATUS_PENDING`, `TRIGGER_DELIVERY_STATUS_FAILED`, `TRIGGER_DELIVERY_STATUS_RETRYING`. |

**Response (200)**

| Name | Type | Description |
| --- | --- | --- |
| `deliveries` | array of object | One page of the endpoint's deliveries that match the filters, newest first. |
| `deliveries.connection_id` | string | ID of the connection the event came from. Present even after the connection is deleted. Empty when the event carries none. |
| `deliveries.connection_key_id` | string | Name of the connection the event came from, the value other AgentKit endpoints take as `connector`. Empty when the connection no longer exists. |
| `deliveries.connection_provider` | string | Provider of the connection the event came from. Empty when the connection no longer exists. |
| `deliveries.endpoint_id` | string | ID of the endpoint the event was delivered to. |
| `deliveries.event_id` | string | Event ID of the event: the payload's `dedupe_key` and `correlation_id`. Empty when the event was sent without one. |
| `deliveries.message_timestamp` | string | When the event was accepted for delivery. |
| `deliveries.msg_id` | string | Message ID of the event, sent to the endpoint as the `webhook-id` header. |
| `deliveries.next_attempt_at` | string | When the next attempt is scheduled. Present only while status is TRIGGER_DELIVERY_STATUS_RETRYING. |
| `deliveries.status` | string (enum) | The delivery's state across all its attempts. One of: `TRIGGER_DELIVERY_STATUS_DELIVERED`, `TRIGGER_DELIVERY_STATUS_PENDING`, `TRIGGER_DELIVERY_STATUS_FAILED`, `TRIGGER_DELIVERY_STATUS_RETRYING`. |
| `deliveries.subscription_id` | string | ID of the trigger subscription that sent the event. Present even after the subscription is deleted. Empty when the event carries none. |
| `deliveries.trigger_mode` | string (enum) | How the trigger detects events, from the newest version of its definition: WEBHOOK or POLL. The trigger's mode now, not a record of how this one event was detected. TRIGGER_MODE_UNSPECIFIED when the subscription or the definition no longer exists. One of: `WEBHOOK`, `POLL`. |
| `deliveries.trigger_name` | string | Key of the trigger that fired, as the subscription was created with. Empty when the subscription no longer exists. |
| `next_page_token` | string | Pass this as page_token, with the same endpoint_id and filters, to read the next page of older deliveries. Empty when there are no older deliveries. |

**Errors**

- `400`: Invalid request - endpoint_id is missing, is longer than 256 characters, contains characters other than letters, digits, `.`, `_` and `-`, or does not name a trigger delivery endpoint in this environment; status is not a known delivery status; channel is not a connection ID (`conn_`) or trigger subscription ID (`trgs_`) in this environment; `after` or `before` is not a valid timestamp, or `after` is later than `before`; or page_token is malformed or was issued for a different endpoint or set of filters
- `404`: Not found - Triggers isn't turned on for your environment
- `429`: Too many requests - deliveries are being read too often. Retry shortly; the request is not retried on your behalf
- `500`: Internal error - the deliveries could not be read; retry the request

**Request**

```bash
curl -sS -G -X GET \
  "$SCALEKIT_ENVIRONMENT_URL/api/v1/trigger-delivery/endpoints/ep_2qGv8XHk3mT5bJr9LwNc7pZeYfA/deliveries" \
  -H "Authorization: Bearer $TOKEN" \
  --data-urlencode "status=TRIGGER_DELIVERY_STATUS_FAILED"
```

**Response**

```json
{
  "deliveries": [
    {
      "msg_id": "msg_2qGvA4uPf2HjQ7zTn5KrW8dCxLb",
      "event_id": "ca_5F133400349586228019.trgs_5F141020933185734981.00Q5g00000AbCdEFGJ",
      "endpoint_id": "ep_2qGv8XHk3mT5bJr9LwNc7pZeYfA",
      "status": "TRIGGER_DELIVERY_STATUS_FAILED",
      "message_timestamp": "2026-10-28T10:02:44.910Z",
      "subscription_id": "trgs_141020933185734981",
      "trigger_name": "salesforce_lead_created",
      "trigger_mode": "POLL",
      "connection_id": "conn_133400101014995480",
      "connection_key_id": "salesforce",
      "connection_provider": "SALESFORCE"
    }
  ],
  "next_page_token": ""
}
```

**Python SDK:** `scalekit_client.actions.triggers.list_deliveries`

List trigger events sent to one of your endpoints, newest first.

```python
scalekit_client.actions.triggers.list_deliveries(
    endpoint_id: str,
    page_size: int | None = None,
    page_token: str | None = None,
    status: TriggerDeliveryStatus | str | int | None = None,
    channel: str | None = None,
    after: datetime | None = None,
    before: datetime | None = None,
) -> ListTriggerDeliveriesByEndpointResponse
```

Example:

```python
from scalekit.actions import TriggerDeliveryStatus

result = scalekit_client.actions.triggers.list_deliveries(
    endpoint_id="ep_2qGv8XHk3mT5bJr9LwNc7pZeYfA",
    status=TriggerDeliveryStatus.FAILED,
)
```

| Parameter | Type | Required | Description |
| --- | --- | --- | --- |
| `endpoint_id` | `str` | Yes | ID of your delivery endpoint (`ep_...`), the URL on your server that you added under **Developers** > **Trigger Delivery**. [Look up a delivery](https://docs.scalekit.com/agentkit/reference/triggers/look-up-a-delivery/) returns it as `endpoint_id` on each attempt. |
| `page_size` | `int \| None` | No | Messages per page; the server default is 20, capped at 100. |
| `page_token` | `str \| None` | No | `next_page_token` of a previous page (with the same filters). |
| `status` | `TriggerDeliveryStatus \| str \| int \| None` | No | Only messages in this delivery state. |
| `channel` | `str \| None` | No | Only messages for this connection (`conn_...`) or subscription (`trgs_...`). |
| `after` | `datetime \| None` | No | Only messages after this aware instant (at most 90 days back). |
| `before` | `datetime \| None` | No | Only messages before this aware instant. |

Returns `ListTriggerDeliveriesByEndpointResponse`: One page of messages and `next_page_token`.


Part of [Triggers](https://docs.scalekit.com/agentkit/reference/triggers/) in the [AgentKit API reference](https://docs.scalekit.com/agentkit/reference/). Authentication: https://docs.scalekit.com/agentkit/reference/authentication.md. Errors and rate limits: https://docs.scalekit.com/agentkit/reference/errors.md. Pagination: https://docs.scalekit.com/agentkit/reference/pagination.md


---

## More Scalekit documentation

| Resource | What it contains | When to use it |
|----------|-----------------|----------------|
| [/llms.txt](/llms.txt) | Structured index with routing hints per product area | Start here — find which documentation set covers your topic before loading full content |
| [/llms-full.txt](/llms-full.txt) | Complete documentation for all Scalekit products in one file | Use when you need exhaustive context across multiple products or when the topic spans several areas |
| [sitemap-0.xml](https://docs.scalekit.com/sitemap-0.xml) | Full URL list of every documentation page | Use to discover specific page URLs you can fetch for targeted, page-level answers |
