List messages in a conversation

Add MCP server to your AI tool

Allow AI tools and LLMs to interact with the API documentation portal through MCP.

MCP server URL

https://docs.usehearsay.com/mcp

Standard setup for AI tools providing an mcp.json file

mcp.json
{
  "integrations MCP server": {
    "url": "https://docs.usehearsay.com/mcp"
  }
}

Close
GET /conversation/search-entries

Lists messages for the selected conversations of a case, with attachments, tags and comment counts. Dates are the device's wall-clock time labelled UTC.

Headers

  • organization string Required

    id of the selected (active) organization

Query parameters

  • page number

    Default value is 1.

  • perPage number

    Default value is 10.

  • skip number

    If skip/limit not provided, page/perPage will take precedence

  • limit number

    If skip/limit not provided, page/perPage will take precedence

  • sortOrder string

    Values are asc or desc. Default value is asc.

  • case string

    Required if caseSlug not present

  • caseSlug string

    Required if case not present

  • conversation string

    ID of the conversation to search for

  • tags array[string]
  • excludeTags array[string]

    Exclude messages carrying any of these tag ids. Must not overlap tags.

  • untagged boolean

    When truthy (1/true), return only messages with no tags attached. Takes precedence over the tags/excludeTags filters.

  • source string

    Values are message, whatsapp, voicemail, call_log, facebook_dump, instagram_dump, threads_dump, or email.

  • sources array[string]

    Values are message, whatsapp, voicemail, call_log, facebook_dump, instagram_dump, threads_dump, or email.

  • linkedContacts array[string]
  • devices array[string]
  • startDate string(date-time)
  • endDate string(date-time)
  • hasAttachments number

    0 false, 1 true

  • sortBy string

    Values are sentAt, date, or messageIndex. Default value is messageIndex.

  • sharedStatus string

    Opposing-council only: filter to entries whose ocSharedStatus matches (e.g. pending for "show me what I have not shared yet"). Ignored for non-OC callers.

    Values are shared, pending, or not_gated.

Responses

  • 200 application/json
    Hide response attributes Show response attributes object
    • data object Required
      Hide data attributes Show data attributes object
      • total number Required
      • page number
      • perPage number
      • skip number
      • limit number
      • totalPages number Required
      • nextPage number | null Required
      • previousPage number | null Required
      • data array[object]
        Hide data attributes Show data attributes object
        • text string | null Required
        • tags array[object] | null Required

          The full record on routes that load it; null (or an empty list) on routes that do not.

          Hide tags attributes Show tags attributes object
          • name string Required
          • nameLowercase string Required
        • deviceType string | null Required
        • sender object Required

          The full record on routes that load it; null (or an empty list) on routes that do not.

          Hide sender attributes Show sender attributes object
          • fullName string Required
          • firstName string Required
          • phoneNational array[string] Required
          • avatar object Required

            The full record on routes that load it; null (or an empty list) on routes that do not.

            Hide avatar attributes Show avatar attributes object
            • name string Required
            • convertedName string | null Required
            • transferState number | null Required

              Values are 0, 1, 5, 6, or 7.

            • totalBytes number | null Required
          • initials string Required
          • isEdited boolean | null Required

            True when the contact name was edited after import. When it was not edited the value is usually false, but because of how it is computed it can also be null, an empty string, or missing.

        • receiver object Required

          The full record on routes that load it; null (or an empty list) on routes that do not.

          Hide receiver attributes Show receiver attributes object
          • fullName string Required
          • firstName string Required
          • phoneNational array[string] Required
          • avatar object Required

            The full record on routes that load it; null (or an empty list) on routes that do not.

            Hide avatar attributes Show avatar attributes object
            • name string Required
            • convertedName string | null Required
            • transferState number | null Required

              Values are 0, 1, 5, 6, or 7.

            • totalBytes number | null Required
          • initials string Required
          • isEdited boolean | null Required

            True when the contact name was edited after import. When it was not edited the value is usually false, but because of how it is computed it can also be null, an empty string, or missing.

        • isEmpty boolean Required
        • iMessageType string Required

          Values are na, text, text-with-attachment, group_title_action, group_picture_action, location_share_start_stop, group_member_added, group_member_removed, face_time, message-layout, location, link, file_attached, or unsent.

        • isFromMe boolean Required
        • isDelivered boolean Required
        • isDeleted boolean Required
        • isMissingMedia boolean Required
        • isSystemMessage boolean Required
        • attachment object Required

          The full record on routes that load it; null (or an empty list) on routes that do not.

          Hide attachment attributes Show attachment attributes object
          • name string Required
          • convertedName string | null Required
          • transferState number | null Required

            Values are 0, 1, 5, 6, or 7.

          • totalBytes number | null Required
        • additionalAttachments array[object] | null Required

          The full record on routes that load it; null (or an empty list) on routes that do not.

          Hide additionalAttachments attributes Show additionalAttachments attributes object
          • name string Required
          • convertedName string | null Required
          • transferState number | null Required

            Values are 0, 1, 5, 6, or 7.

          • totalBytes number | null Required
        • date string(date-time) | null Required
        • sentAt string(date-time) | null Required
        • readAt string(date-time) | null Required
        • deletedAt string(date-time) | null Required
        • recoveredAt string(date-time) | null Required
        • parentMessageText string | null Required

          Text of the message this one replies to; null when it is not a reply.

        • parentMessageAttachment object Required
          Hide parentMessageAttachment attributes Show parentMessageAttachment attributes object
          • name string Required
          • convertedName string | null Required
          • transferState number | null Required

            Values are 0, 1, 5, 6, or 7.

          • totalBytes number | null Required
        • parentMessageIndex number | null Required

          Index of the message this one replies to; null when it is not a reply.

        • service string Required
        • mimeType string Required
        • editHistory array[object] | null Required
        • deletedMessagesLogs object | null Required
        • commentsCount number Required
        • messageIndex number Required
        • attachedTags array[object]
          Hide attachedTags attributes Show attachedTags attributes object
          • tagId string Required

            Tag id (Tag._id)

          • tag string Required

            Tag display name (Tag.name)

          • addedBy string Required

            Values are user, ai, auto, auto-import, system, or default.

          • addedById string | null
          • removedAt string(date-time) | null
          • removedBy string | null

            Values are user, ai, auto, auto-import, system, or default.

          • removedById string | null
        • ocSharedStatus string | null

          Opposing-council only: how this conversation entry has been shared with the OL. Omitted (null) for non-OC callers.

          Values are shared, pending, or not_gated.

        • collectionCount number Required
        • durationInSeconds number | null Required

          Voicemail length in seconds; null unless the message is a voicemail.

        • callDurationInSeconds number | null Required

          Call length in seconds; null unless the message is a call.

        • callType string Required

          Call direction: 'incoming', 'outgoing', 'rejected' or 'not_connected'; an empty string unless the message is a call.

        • callSource string | null Required
    • statusCode number Required
    • timestamp string(date-time) Required
GET /conversation/search-entries
curl \
 --request GET 'http://api.example.com/conversation/search-entries' \
 --header "Authorization: Bearer $ACCESS_TOKEN" \
 --header "organization: string"
Response examples (200)
{
  "data": {
    "total": 42,
    "page": 1,
    "perPage": 20,
    "skip": 0,
    "limit": 20,
    "totalPages": 3,
    "nextPage": 2,
    "previousPage": 42.0,
    "data": [
      {
        "text": "See you at 6",
        "tags": [
          {
            "name": "Important",
            "nameLowercase": "important"
          }
        ],
        "deviceType": "ios",
        "sender": {
          "fullName": "Jane Doe",
          "firstName": "Jane",
          "phoneNational": [
            "(555) 555-0100"
          ],
          "avatar": {
            "name": "IMG_0001.HEIC",
            "convertedName": "IMG_0001_display.png",
            "transferState": 5,
            "totalBytes": 2483120
          },
          "initials": "JD",
          "isEdited": false
        },
        "receiver": {
          "fullName": "Jane Doe",
          "firstName": "Jane",
          "phoneNational": [
            "(555) 555-0100"
          ],
          "avatar": {
            "name": "IMG_0001.HEIC",
            "convertedName": "IMG_0001_display.png",
            "transferState": 5,
            "totalBytes": 2483120
          },
          "initials": "JD",
          "isEdited": false
        },
        "isEmpty": false,
        "iMessageType": "na",
        "isFromMe": true,
        "isDelivered": true,
        "isDeleted": false,
        "isMissingMedia": false,
        "isSystemMessage": false,
        "attachment": {
          "name": "IMG_0001.HEIC",
          "convertedName": "IMG_0001_display.png",
          "transferState": 5,
          "totalBytes": 2483120
        },
        "additionalAttachments": [
          {
            "name": "IMG_0001.HEIC",
            "convertedName": "IMG_0001_display.png",
            "transferState": 5,
            "totalBytes": 2483120
          }
        ],
        "date": "2026-01-15T14:30:00.000Z",
        "sentAt": "2026-01-15T14:30:00.000Z",
        "readAt": "2026-01-15T14:30:00.000Z",
        "deletedAt": "2026-05-04T09:42:00Z",
        "recoveredAt": "2026-05-04T09:42:00Z",
        "parentMessageText": "Are we still on for dinner?",
        "parentMessageAttachment": {
          "name": "IMG_0001.HEIC",
          "convertedName": "IMG_0001_display.png",
          "transferState": 5,
          "totalBytes": 2483120
        },
        "parentMessageIndex": 41,
        "service": "iMessage",
        "mimeType": "image/jpeg",
        "editHistory": [
          {
            "date": "2026-01-15T14:30:00.000Z",
            "text": "See you at 7"
          }
        ],
        "deletedMessagesLogs": {
          "total": 2,
          "minDate": "2026-01-15T14:05:00.000Z",
          "maxDate": "2026-01-15T14:20:00.000Z",
          "deletedMessages": []
        },
        "commentsCount": 2,
        "messageIndex": 42,
        "attachedTags": [
          {
            "tagId": "507f1f77bcf86cd799439011",
            "tag": "Important",
            "addedBy": "user",
            "addedById": "507f1f77bcf86cd799439012",
            "removedAt": "2026-05-04T09:42:00Z",
            "removedBy": "user",
            "removedById": "string"
          }
        ],
        "ocSharedStatus": "shared",
        "collectionCount": 1,
        "durationInSeconds": 32,
        "callDurationInSeconds": 125,
        "callType": "incoming",
        "callSource": "phone"
      }
    ]
  },
  "statusCode": 200,
  "timestamp": "2026-01-15T10:15:00.000Z"
}