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

# List Pending Sends

> List the account's held sends, newest first, optionally filtered by status.

Lists held sends for the account the key belongs to, newest first. List rows omit the payload, render snapshot, and per-message execution evidence; fetch a [single pending send](/api-reference/v2/pending-sends/get) for those details and durable execution reconciliation. Listing derives status without performing recovery writes.

## Query Parameters

<ParamField query="status" type="string">
  One of `pending`, `approved`, `executing`, `unknown_execution`, `sent`, `rejected`, `cancelled`, `expired`. `pending` and `approved` return only sends that have not lapsed; `expired` returns the ones that have. An expired execution claim appears as `unknown_execution` until reconciled.
</ParamField>

<ParamField query="before" type="string">
  Optional ISO-8601 upper time bound. Use `cursor` for pagination so rows sharing a timestamp are not skipped. Cannot be combined with `cursor`.
</ParamField>

<ParamField query="cursor" type="string">Pass the previous response's `next_cursor` unchanged. Rows are ordered by creation time and ID, newest first.</ParamField>

<ParamField query="limit" type="integer" default="50">
  Page size, max 100.
</ParamField>

## Response Fields

<ResponseField name="pending_sends" type="object[]">Pending send rows, newest first.</ResponseField>
<ResponseField name="has_more" type="boolean">`true` when older rows exist beyond this page.</ResponseField>
<ResponseField name="next_cursor" type="string">Opaque continuation cursor; `null` on the final page.</ResponseField>

## Errors

| HTTP Status | Error Code      | Description                                                                                                |
| ----------- | --------------- | ---------------------------------------------------------------------------------------------------------- |
| 400         | `invalid_param` | Unknown `status`, invalid `limit`, malformed `before` or `cursor`, or both pagination parameters supplied. |

Also `401 invalid_credentials`.

## Examples

<RequestExample>
  ```bash cURL theme={null}
  curl -G https://api.tracklysms.com/api/v2/pending-sends \
    -H "X-Api-Key: trk_your_api_key" \
    --data-urlencode "status=approved" \
    --data-urlencode "limit=20"
  ```
</RequestExample>

<ResponseExample>
  ```json Success (200) theme={null}
  {
    "pending_sends": [
      {
        "id": "66f1c2a9b8e4d3f0a1b2c3d4",
        "status": "approved",
        "kind": "send",
        "recipient_count": 1,
        "note": "Reservation confirmation requested in chat at 2:10pm",
        "api_key_id": "66e0a1b2c3d4e5f6a7b8c9d0",
        "created_at": "2026-09-04T14:10:32.000000Z",
        "expires_at": "2026-09-05T14:10:32.000000Z",
        "decided_at": "2026-09-04T14:12:05.000000Z",
        "decided_by": "user:1042",
        "decision_reason": null,
        "executed_at": null,
        "executed_by_key_id": null,
        "result": null,
        "last_error": null
      }
    ],
    "has_more": false,
    "next_cursor": null
  }
  ```
</ResponseExample>
