/v1/conversation_messages

Fetch the individual messages within a single conversation.

Recent Requests
Log in to see full request history
TimeStatusUser Agent
Retrieving recent requests…
LoadingLoading…

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.

FieldTypeRequiredDescription
conversation_idNumberyesThe 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:

FieldTypeDescription
idNumberThe id of the message.
atDateTimeWhen the message was created.
event_typeStringWhat happened on this message (e.g. sent, replied, failed, confirmed, attachment_sent).
unreadBooleanTrue if the message has not yet been marked read in the Apptoto inbox.
contentString or nullPlain-text body.
content_htmlString or nullHTML body. Email only.
subjectString or nullEmail subject. Null for SMS / call messages.
fromStringSender (the appointment participant for inbound messages; the Apptoto user's number / address for outbound).
toStringRecipient.
autoBooleanTrue if the message was sent automatically (reminder, auto-reply).
delivery_stateStringProvider delivery status (e.g. delivered, failed, pending).
delivery_errorString or nullProvider error code, if any.
delivery_failedBooleanTrue if the provider reported a permanent delivery failure.
send_failedBooleanTrue if Apptoto could not hand the message off to the provider.
attachmentsArrayURLs 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.

Query Params
int32
required

The id of the conversation, as returned by /v1/conversations.

Language
Credentials
:
LoadingLoading…
Response
Click Try It! to start a request and see the response here!