Fetch the individual messages within a single conversation.
| Time | Status | User Agent | |
|---|---|---|---|
Retrieving recent requests… | |||
Returns the chronological list of individual messages (SMS lines, emails, call events) that make up one conversation. Use the id returned by /v1/conversations as the conversation_id.
| Field | Type | Required | Description |
|---|---|---|---|
| conversation_id | Number | yes | The id of the conversation, from /v1/conversations. |
This endpoint is not paginated. Conversations typically have fewer than 100 messages.
Each message has the following fields:
| Field | Type | Description |
|---|---|---|
| id | Number | The id of the message. |
| at | DateTime | When the message was created. |
| event_type | String | What happened on this message (e.g. sent, replied, failed, confirmed, attachment_sent). |
| unread | Boolean | True if the message has not yet been marked read in the Apptoto inbox. |
| content | String or null | Plain-text body. |
| content_html | String or null | HTML body. Email only. |
| subject | String or null | Email subject. Null for SMS / call messages. |
| from | String | Sender (the appointment participant for inbound messages; the Apptoto user's number / address for outbound). |
| to | String | Recipient. |
| auto | Boolean | True if the message was sent automatically (reminder, auto-reply). |
| delivery_state | String | Provider delivery status (e.g. delivered, failed, pending). |
| delivery_error | String or null | Provider error code, if any. |
| delivery_failed | Boolean | True if the provider reported a permanent delivery failure. |
| send_failed | Boolean | True if Apptoto could not hand the message off to the provider. |
| attachments | Array | URLs of any attachments on the message. |
Messages are filtered to user-visible events only (sent, replied, failed, forwarded, called, dialed, confirmed, not_coming, needs_reschedule, no_reschedule, unconfirmed, booking_accepted, booking_declined, attachment_sent, unsubscribed). System-internal events are not returned.
Example response:
{
"messages": [
{
"id": 1001,
"at": "2026-04-14T17:31:02-07:00",
"event_type": "sent",
"unread": false,
"content": "Hi Fred, just a reminder of your demo tomorrow at 12pm.",
"content_html": null,
"subject": null,
"from": "+15035550100",
"to": "+16505551212",
"auto": true,
"delivery_state": "delivered",
"delivery_error": null,
"delivery_failed": false,
"send_failed": false,
"attachments": []
},
{
"id": 1002,
"at": "2026-04-14T17:33:21-07:00",
"event_type": "replied",
"unread": true,
"content": "Confirmed, thanks!",
"content_html": null,
"subject": null,
"from": "+16505551212",
"to": "+15035550100",
"auto": false,
"delivery_state": "delivered",
"delivery_error": null,
"delivery_failed": false,
"send_failed": false,
"attachments": []
}
]
}OAuth scope
Calls authenticated with an OAuth 2.0 bearer token must include the messaging:read scope. A token without it receives a 403 insufficient_scope response. HTTP Basic auth is not scope-gated.
