Docs
API Reference

Conversations Endpoint

List messages and send replies on a ticket.

List messages

GET /tickets/:id/messages

Scopes required: messages:read

Returns every message in the ticket's conversation, ordered by creation time.

Response:

{
  "messages": [
    {
      "id": "msg_01abc...",
      "direction": "inbound",
      "channel": "email",
      "subject": "Where's my order?",
      "fromAddress": "jane@example.com",
      "fromName": "Jane Smith",
      "toAddresses": ["support@yourcompany.com"],
      "ccAddresses": [],
      "bodyText": "Hi, my order hasn't arrived yet.",
      "bodyHtml": null,
      "bodyTextCleaned": "Hi, my order hasn't arrived yet.",
      "externalId": "<msg@mail.example.com>",
      "inReplyTo": null,
      "authorType": "customer",
      "authorId": "cust_01abc...",
      "authorName": "Jane Smith",
      "conversationId": "conv_01abc...",
      "aiSentiment": "neutral",
      "detectedLanguage": "en",
      "createdAt": "2026-04-22T10:30:00Z"
    }
  ],
  "total": 1
}

Selected message fields:

FieldDescription
directioninbound (from customer) or outbound (from operator or AI)
channelHow the message entered: email or chat
fromAddress / fromNameSender's email and display name
toAddresses / ccAddressesRecipient lists, same semantics as email
bodyTextPlain-text body as originally received or sent
bodyTextCleanedInbound-only — body with quoted-reply chains and signatures stripped. Null on outbound messages
authorTypecustomer, user (operator), or agent (AI/system)
aiSentimentpositive, neutral, negative, or frustrated — set on inbound messages when auto-triage is enabled
detectedLanguageISO 639-1 code (e.g. en, es) — null if detection hasn't run

Send a reply

POST /tickets/:id/messages

Scopes required: messages:send

Sends an outbound reply to the customer from a monitored inbox address. The reply is threaded into the ticket's conversation and dispatched via the normal outbound pipeline (DKIM/SPF, signature, AI attribution if applicable).

Request body:

{
  "fromAddress": "support@yourcompany.com",
  "bodyText": "Thanks for reaching out! Your order ships tomorrow.",
  "userId": "user_01abc..."
}
FieldTypeRequiredDescription
fromAddressstringyesA monitored inbox on a verified domain — typically the one the ticket came in on
bodyTextstringyesPlain-text reply body
userIdstringyesThe operator the reply should be attributed to
bodyHtmlstringnoOptional HTML body
subjectstringnoDefaults to Re: <ticket subject>
ccAddressesstring[]noAdditional recipients

Response (201):

{
  "message": {
    "id": "msg_01def...",
    "direction": "outbound",
    "bodyText": "Thanks for reaching out! ...",
    "...": "other message fields as above"
  }
}

Every message posted to this endpoint is sent to the customer. Internal notes (team-only comments that never leave Ticket0) are a separate resource and are not currently exposed on the public v1 API — you can only create them through the app UI.

On this page