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

# List Outbound Messages

> List outbound messages (campaign + direct) with filters and cursor pagination

## Endpoint

`GET https://api.apifycloud.io/api/v1/analytics/{appId}/outbound-messages`

## Authentication

Bearer token required.

Scope: `messages:read`

## Path parameters

* `appId` (UUID, required)

## Query parameters

* `limit` (number, optional)
* `cursor` (string, optional)
* `status` (string, optional)
* `campaign` (string, optional) campaign ID
* `template` (string, optional) template name (partial match)
* `source` (string, optional) one of `all`, `campaign`, `direct`
* `startDate` (string, optional) ISO date (YYYY-MM-DD)
* `endDate` (string, optional) ISO date (YYYY-MM-DD)

## Response

```json theme={null}
{
  "data": [
    {
      "id": "uuid",
      "status": "string",
      "recipient_phone": "string",
      "template_name": "string",
      "campaign_id": "uuid",
      "sent_at": "2024-01-01T00:00:00.000Z",
      "delivered_at": "2024-01-01T00:00:00.000Z",
      "read_at": "2024-01-01T00:00:00.000Z",
      "created_at": "2024-01-01T00:00:00.000Z",
      "cost": 0,
      "currency": "USD",
      "source": "campaign"
    }
  ],
  "meta": {
    "timestamp": "2024-01-01T00:00:00.000Z"
  },
  "pagination": {
    "limit": 25,
    "hasMore": false,
    "nextCursor": null
  }
}
```

## Errors

* `403 forbidden` unauthorized for app or missing scope
* `400 validation_error` invalid query parameters
* `429 rate_limit_exceeded`
* `500 server_error`

## Example

```bash theme={null}
curl "https://api.apifycloud.io/api/v1/analytics/{appId}/outbound-messages?limit=25&source=campaign" \
  -H "Authorization: Bearer {access_token}"
```
