Skip to content

Pagination & filtering

List endpoints return newest items first and use cursor pagination:

GET /v1/messages?limit=50&status=FAILED&createdAfter=2026-10-01T00:00:00Z
{
  "data": [ { "id": "msg_...", "...": "..." } ],
  "pagination": { "nextCursor": "MjAyNi0xMC0wOVQxMDo...", "hasMore": true }
}

Fetch the next page with ?cursor=<nextCursor> and the same filters. Stop when hasMore is false (nextCursor is then null). limit is 1–100 (default 25). Cursors are opaque; do not build or modify them.

Cursor pagination is stable while new items arrive: items created after you started paging do not shift pages.

EndpointFilters
GET /v1/instancesexternalReference (exact), status
GET /v1/messagesinstanceId, direction (outbound/inbound), status, clientReference, createdAfter, createdBefore (ISO 8601 with offset)
GET /v1/eventstype, instanceId
GET /v1/webhooks/{id}/deliveriesstatus (pending, succeeded, failed, dead), eventType

GET /v1/webhooks and GET /v1/keys return all items ({ "data": [...] }) without pagination.

SDK helpers iterate all pages for you: client.messages.listAll(...) (TypeScript) and client.Messages.ListAllAsync(...) (.NET).