MisarMisar Docs
MisarMailMisar.BlogMisarReachMisarPostMisar.DevMisarSEOMisar PlatformMisar SSO
API Reference

Conversations API

List CRM conversations for the unified inbox and load a per-contact message timeline — api.misar.io/reach.

Conversations power MisarReach's unified inbox. Each conversation is a per-lead, per-channel thread with a last-message snippet; the full message timeline for a contact is loaded separately. Both endpoints require the deals:read scope and are scoped to the authenticated user.

Base URL: https://api.misar.io/reach — pass Authorization: Bearer msr_your_key_here on every request.

List conversations

GET/api/conversations

Returns the caller's conversations for the inbox list, most-recently-active first. Powers the left-hand conversation list on the inbox.

Query parameters

statusstringquerydefault: all

Filter by thread status: "active" | "closed" | "snoozed" | "all".

channelstringquery

Filter by channel: "email" | "whatsapp" | "sms" | "linkedin". Omit for all channels.

qstringquery

Case-insensitive search over lead_name and lead_email (max 100 characters).

limitnumberquerydefault: 100

Maximum conversations to return (1–200).

Response fields

conversations[].idstring

Conversation UUID.

conversations[].channelstring

Channel of the thread: email | whatsapp | sms | linkedin.

conversations[].lead_namestring

Lead's display name. May be null.

conversations[].lead_emailstring

Lead's email — the key used to load the timeline (see below).

conversations[].last_messagestring

Snippet of the most recent message in the thread.

conversations[].last_message_atstring

ISO timestamp of the last message. Threads are ordered by this, newest first.

conversations[].intentstring

Detected conversation intent, when classified. May be null.

conversations[].statusstring

Thread status: active | closed | snoozed.

curl "https://api.misar.io/reach/api/conversations?status=active&channel=email&limit=50" \
  -H "Authorization: Bearer msr_your_key_here"
{
  "conversations": [
    {
      "id": "c1a2…",
      "channel": "email",
      "lead_name": "Priya Sharma",
      "lead_email": "priya@example.com",
      "last_message": "Sounds good — can we do Thursday?",
      "last_message_at": "2026-07-12T15:04:00Z",
      "intent": "meeting_request",
      "status": "active",
      "created_at": "2026-07-10T09:00:00Z"
    }
  ]
}

Get a conversation timeline

GET/api/conversations/:email

Returns every conversation the caller has with a given contact (matched by lead_email), each expanded with its full ordered message timeline. Threads are newest-active first; messages within a thread are oldest-first. Returns an empty array when there is no conversation with that address.

Path parameters

emailstringpathrequired

The contact's email address (URL-encode it). Matches lead_email on the caller's conversations.

Response fields

conversations[].messages[].senderstring

Who sent the message (e.g. the lead vs. the account holder).

conversations[].messages[].messagestring

Message body.

conversations[].messages[].channelstring

Channel the individual message was sent on.

conversations[].messages[].created_atstring

ISO timestamp; messages are returned in ascending order.

curl "https://api.misar.io/reach/api/conversations/priya%40example.com" \
  -H "Authorization: Bearer msr_your_key_here"
{
  "conversations": [
    {
      "id": "c1a2…",
      "channel": "email",
      "lead_name": "Priya Sharma",
      "lead_email": "priya@example.com",
      "last_message": "Sounds good — can we do Thursday?",
      "last_message_at": "2026-07-12T15:04:00Z",
      "intent": "meeting_request",
      "created_at": "2026-07-10T09:00:00Z",
      "messages": [
        { "id": "m1", "conversation_id": "c1a2…", "sender": "agent", "message": "Hi Priya, …", "channel": "email", "created_at": "2026-07-10T09:00:00Z" },
        { "id": "m2", "conversation_id": "c1a2…", "sender": "lead",  "message": "Sounds good — can we do Thursday?", "channel": "email", "created_at": "2026-07-12T15:04:00Z" }
      ]
    }
  ]
}
{ "conversations": [] }

Status codes

  • 200 — conversations (or timeline) returned. An unknown email is not an error — it returns { "conversations": [] }.
  • 500 — failed to load conversations.