List conversation messages

Retrieves a paginated list of the authenticated customer's messages across all conversations, ordered by created date (most recent first).

GET
/v3/conversations

Response Body

application/json

application/json

application/json

curl -X GET "https://example.com/v3/conversations?page=1&page_size=20"
{
  "success": true,
  "data": {
    "messages": [
      {
        "id": "6ba7b810-9dad-11d1-80b4-00c04fd430c8",
        "customer_id": "41681f0a-15b4-45ab-afca-d9af35b4d3a1",
        "contact_id": "14b278db-6db8-448f-a5db-8d6ce46a3451",
        "phone": "+1234567890",
        "phone_international": "+1 234-567-890",
        "region_code": "US",
        "template_id": null,
        "template_name": null,
        "template_category": null,
        "channel": "sms",
        "message_body": null,
        "status": "DELIVERED",
        "direction": "OUTBOUND",
        "created_at": "2026-10-23T15:17:52.4841508+00:00",
        "price": 0.0075,
        "active_contact_price": 0,
        "events": null,
        "reason_code": null,
        "reason": null
      }
    ],
    "pagination": {
      "page": 1,
      "page_size": 20,
      "total_count": 1,
      "total_pages": 1,
      "has_more": false,
      "cursors": null
    }
  },
  "error": null,
  "meta": {
    "request_id": "req_7X9zKp2jDw",
    "timestamp": "2026-10-23T15:22:52.4841522+00:00",
    "version": "v3"
  }
}
{
  "success": false,
  "data": null,
  "error": {
    "code": "VALIDATION_005",
    "message": "Page must be greater than 0",
    "details": null,
    "doc_url": "https://docs.sent.dm/reference/api/error-catalog"
  },
  "meta": {
    "request_id": "req_7X9zKp2jDw",
    "timestamp": "2026-10-23T15:22:52.4841539+00:00",
    "version": "v3"
  }
}
Empty
Empty
{
  "success": false,
  "data": null,
  "error": {
    "code": "INTERNAL_001",
    "message": "An unexpected error occurred. Please contact support with request ID: req_7X9zKp2jDw",
    "details": null,
    "doc_url": "https://docs.sent.dm/reference/api/error-catalog"
  },
  "meta": {
    "request_id": "req_7X9zKp2jDw",
    "timestamp": "2026-10-23T15:22:52.4841542+00:00",
    "version": "v3"
  }
}

Cancel a scheduled message POST

Calls off a message you scheduled with `scheduled_at`, before it is released for sending. The message moves to `CANCELLED`, which is terminal, and it is never sent. **Only a SCHEDULED message can be cancelled.** A message that has already been released — queued, in flight, or finished — returns 409. The release sweeper runs continuously, so a cancellation sent within about a minute of the scheduled instant can lose that race and be refused; cancel with time to spare. **One message per call.** A send to many recipients, or on several channels, becomes one message per recipient × channel, each with its own id; cancel the ones you want stopped. There is no bulk cancellation. **Cancelling is free**, and nothing was charged for the hold in the first place — a scheduled message is only priced and billed at release. **A cancellation fires `message.cancelled`** on your webhook, exactly once, carrying the `scheduled_at` that was called off so a consumer can un-record the send it was expecting. Cancelling the same message again returns this same response and fires no second event. `Idempotency-Key` is honoured. A cancelled message cannot be resent — send a new one. The response is the message itself, in the same shape `GET /v3/messages/{id}` returns, so the `status` you read back is the one now stored on the row, and `scheduled_at` is the time it would have gone out. `GET /v3/messages/{id}` keeps reporting both afterwards. `events` is the message lifecycle as it stood immediately before the cancellation: the CANCELLED entry is written asynchronously and lands a moment later, so read `status` for the outcome. If you need the entry itself, re-fetch the message after a few seconds — `GET /v3/messages/{id}` is cached briefly, so an immediate re-fetch can still show the pre-cancellation state.

List messages for a conversation GET

Retrieves a paginated list of the messages in a single conversation (scoped to the authenticated customer), ordered by created date (most recent first).