Search message text

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-fuzzy

Finds messages in a case whose text matches the search text, with the match highlighted.

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

  • case string

    Required if caseSlug not present

  • caseSlug string

    Required if case not present

  • conversation string

    ID of the conversation to search for

  • searchText string Required

    Minimum length is 3, maximum length is 100.

  • tags array[string]
  • 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)
  • bbCode string

    Default value is highlight="#FFFF00".

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] Required
          Hide tags attributes Show tags attributes object
          • name string Required
          • nameLowercase string Required
        • deviceConversation object Required
          Hide deviceConversation attributes Show deviceConversation attributes object
          • createdAt string(date-time) Required
          • updatedAt string(date-time) Required
          • id string Required
          • messageSharing object Required
          • selectionCoverage object
          • name string Required
          • displayName string Required

            'Conversation with ' unless the name was edited, in which case the edited name as typed.

          • chatName string Required
          • originalDisplayName string Required
          • source string Required

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

          • linkedContacts array[object] | null Required

            Not loaded by any route, so always null or an empty list.

          • device object Required

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

            Hide device attributes Show device attributes object
            • createdAt string(date-time) Required
            • updatedAt string(date-time) Required
            • id string Required
            • deviceId string Required
            • serialNumber string Required
            • name string Required
            • type string Required
            • nonDeviceType string | null Required
            • model string Required
            • timeZone string Required
            • osVersion string Required
            • owner object | null Required

              Not loaded by any route, so always null.

            • devicePhoneNumber string Required
            • organizations array[string] Required

              Organization ids

            • extractionCodes array[string] Required

              Extraction code ids

            • availableData object

              Which data types exist for this device (optionally scoped by query filters).

          • 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
            • createdAt string(date-time) Required
            • updatedAt string(date-time) Required
            • id string Required
            • name string Required
            • providerId string Required
            • convertedName string | null Required
            • convertedProviderId string Required
            • provider string Required
            • size number Required

              Size in bytes

            • transferState number | null Required
          • service string Required
          • lastMessageText string Required
          • firstMessageDate string(date-time) | null Required
          • lastMessageDate string(date-time) Required
          • displayNameEditedAt string(date-time) | null Required
          • lastMessageExternalId string Required
          • isGroup boolean Required

            Default value is false.

          • owner object | null Required

            Not loaded by any route, so always null.

          • isReadonly boolean Required
          • lastExportedAt string(date-time) | null Required
          • messagesCount number Required
          • archivedBy object | null Required

            Not loaded by any route, so always null.

          • archivedAt string(date-time) | null Required
          • starredAt string(date-time) | 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
            • createdAt string(date-time) Required
            • updatedAt string(date-time) Required
            • id string Required
            • name string Required
            • nameLowercase string Required
            • backgroundColor string Required
            • textColor string Required
            • type string Required

              Values are system, organization, case, or user.

            • severity string Required

              Values are info, warning, or danger.

            • origin string Required

              Values are manual or auto-import.

            • creatorAccessType string | null

              Values are org or opposing_council.

            • isActive boolean 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
          • isPlaceholder boolean Required
          • isArchived boolean Required
          • isStarred boolean Required
          • hasAllAttachmentProcessed boolean Required
          • processedAttachmentCount number Required
          • conversationName string Required
          • isNameEdited boolean Required
          • participantCount number Required
        • deviceType string | null Required
        • sender object Required
          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
          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
          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 object Required
          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 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
        • 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.

        • highlightedText string Required
    • statusCode number Required
    • timestamp string(date-time) Required
GET /conversation/search-fuzzy
curl \
 --request GET 'http://api.example.com/conversation/search-fuzzy?searchText=string' \
 --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"
          }
        ],
        "deviceConversation": {
          "createdAt": "2026-01-15T14:30:00.000Z",
          "updatedAt": "2026-01-15T14:30:00.000Z",
          "id": "507f1f77bcf86cd799439011",
          "messageSharing": {
            "sharedMessageCount": 320,
            "totalMessageCount": 1200,
            "totalReportedAt": "2026-01-15T14:30:00.000Z"
          },
          "selectionCoverage": {
            "app": "message",
            "conversationId": 42,
            "mode": "selected_messages",
            "selectedMessageCount": 320,
            "eligibleMessageCount": 1200,
            "includedMessageCount": 320,
            "omittedEligibleMessageCount": 880,
            "selectedNotIncludedCount": 0,
            "totalMessageCount": 1200,
            "deviceConversation": "507f1f77bcf86cd799439011",
            "ingestionStatus": "completed",
            "ingestedMessageCount": 320,
            "verifiedAt": "2026-01-15T14:30:00.000Z",
            "completedAt": "2026-01-15T14:30:00.000Z",
            "failedAt": null,
            "isPartial": true,
            "coverage": "selected_messages",
            "eligibleScope": "after_date_and_incremental_filters",
            "uploadAttemptId": "a3e6a3ab-2c6e-469c-a3ae-ab1e926c93c2",
            "deviceBackupId": "65a1b2c3d4e5f6a7b8c9d0e2",
            "reportOrder": "2026-01-15T14:30:00.000Z:65a1b2c3d4e5f6a7b8c9d0e2"
          },
          "name": "Jane Doe",
          "displayName": "Conversation with Jane Doe",
          "chatName": "+15555550100",
          "originalDisplayName": "Jane Doe",
          "source": "message",
          "linkedContacts": [
            {}
          ],
          "device": {
            "createdAt": "2026-01-15T14:30:00.000Z",
            "updatedAt": "2026-01-15T14:30:00.000Z",
            "id": "507f1f77bcf86cd799439011",
            "deviceId": "3F2504E0-4F89-11D3-9A0C-0305E82C3301",
            "serialNumber": "F2LXK0QJHG7F",
            "name": "Jane's iPhone",
            "type": "ios",
            "nonDeviceType": "string",
            "model": "iPhone 15",
            "timeZone": "America/New_York",
            "osVersion": "18.0",
            "owner": {},
            "devicePhoneNumber": "+15555550100",
            "organizations": [
              "507f1f77bcf86cd799439011"
            ],
            "extractionCodes": [
              "507f1f77bcf86cd799439013"
            ],
            "availableData": {
              "messages": true,
              "calls": false
            }
          },
          "avatar": {
            "createdAt": "2026-01-15T14:30:00.000Z",
            "updatedAt": "2026-01-15T14:30:00.000Z",
            "id": "507f1f77bcf86cd799439011",
            "name": "photo.heic",
            "providerId": "uploads/507f1f77bcf86cd799439011/photo.heic",
            "convertedName": "photo.jpg",
            "convertedProviderId": "uploads/507f1f77bcf86cd799439011/photo.jpg",
            "provider": "s3",
            "size": 204800,
            "transferState": 42.0
          },
          "service": "iMessage",
          "lastMessageText": "See you at 6",
          "firstMessageDate": "2025-03-01T09:00:00.000Z",
          "lastMessageDate": "2026-01-15T14:30:00.000Z",
          "displayNameEditedAt": "2026-05-04T09:42:00Z",
          "lastMessageExternalId": "58231",
          "isGroup": false,
          "owner": {},
          "isReadonly": false,
          "lastExportedAt": "2026-05-04T09:42:00Z",
          "messagesCount": 320,
          "archivedBy": {},
          "archivedAt": "2026-05-04T09:42:00Z",
          "starredAt": "2026-05-04T09:42:00Z",
          "tags": [
            {
              "createdAt": "2026-01-15T14:30:00.000Z",
              "updatedAt": "2026-01-15T14:30:00.000Z",
              "id": "507f1f77bcf86cd799439011",
              "name": "Important",
              "nameLowercase": "important",
              "backgroundColor": "#FDE68A",
              "textColor": "#92400E",
              "type": "system",
              "severity": "info",
              "origin": "manual",
              "creatorAccessType": "org",
              "isActive": true
            }
          ],
          "attachedTags": [
            {
              "tagId": "507f1f77bcf86cd799439011",
              "tag": "Important",
              "addedBy": "user",
              "addedById": "507f1f77bcf86cd799439012",
              "removedAt": "2026-05-04T09:42:00Z",
              "removedBy": "user",
              "removedById": "string"
            }
          ],
          "isPlaceholder": false,
          "isArchived": false,
          "isStarred": false,
          "hasAllAttachmentProcessed": true,
          "processedAttachmentCount": 12,
          "conversationName": "Conversation with Jane Doe",
          "isNameEdited": false,
          "participantCount": 2
        },
        "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-05-04T09:42:00Z",
        "deletedAt": "2026-05-04T09:42:00Z",
        "recoveredAt": "2026-05-04T09:42:00Z",
        "parentMessageText": "Are we still on for tonight?",
        "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": 3,
          "minDate": "2026-01-14T09:00:00.000Z",
          "maxDate": "2026-01-15T14:30:00.000Z",
          "deletedMessages": []
        },
        "messageIndex": 42,
        "attachedTags": [
          {
            "tagId": "507f1f77bcf86cd799439011",
            "tag": "Important",
            "addedBy": "user",
            "addedById": "507f1f77bcf86cd799439012",
            "removedAt": "2026-05-04T09:42:00Z",
            "removedBy": "user",
            "removedById": "string"
          }
        ],
        "collectionCount": 1,
        "durationInSeconds": 37,
        "callDurationInSeconds": 125,
        "callType": "outgoing",
        "highlightedText": "See you at [highlight=#FFFF00]6[/highlight]"
      }
    ]
  },
  "statusCode": 200,
  "timestamp": "2026-01-15T10:15:00.000Z"
}