Tag many messages

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
POST /conversation/entries/tags/{caseId}/bulk

Applies tags to many messages at once and returns the updated messages.

Headers

  • organization string Required

    id of the selected (active) organization

Path parameters

  • caseId string Required

    Id of the case

application/json

Body Required

Tags to update

  • messages array[string] Required

    Array of message ids

    At least 0 but not more than 1000 elements.

  • tagNames array[string] Required

    array of tag text or id

    At least 0 but not more than 200 elements.

Responses

  • 201 application/json
    Hide response attributes Show response attributes object
    • data object Required
      Hide data attribute Show data attribute object
      • data object Required
        Hide data attributes Show data attributes object
        • createdAt string(date-time) Required
        • updatedAt string(date-time) Required
        • id string Required
        • 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
          • 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
        • deviceConversation object Required

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

          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
        • device object | null Required

          Not loaded by any route, so always null.

        • 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
          • createdAt string(date-time) Required
          • updatedAt string(date-time) Required
          • id string Required
          • fullName string Required
          • firstName string Required
          • lastName string Required
          • originalFullName string Required
          • email string Required
          • address string Required
          • phone array[string] Required
          • phoneNational array[string] Required
          • source string Required

            Values are default, message, device_contact, whatsapp, voicemail, call_log, social, facebook, instagram, or threads.

          • linkedContacts array[object] | null Required

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

          • 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
          • 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).

          • owner object Required

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

            Hide owner attributes Show owner attributes object
            • createdAt string(date-time) Required
            • updatedAt string(date-time) Required
            • id string Required
            • name string Required
            • email string Required
            • phone array[string] Required
            • isActive boolean Required
            • isEmailVerified boolean Required
            • lastActive string(date-time) Required
            • roles 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
              • 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
            • onboardingStatus string | null Required
            • userType string | null Required
            • firstName string Required
            • lastName string Required
            • initials string Required
            • userOrganizations array[object]

              Only filled on the signed-in user's own profile; absent or empty on a user nested in another record.

          • initials string Required
          • conversations array[string]
          • isEdited boolean Required

            True when the name differs from the one on the device

        • 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
          • createdAt string(date-time) Required
          • updatedAt string(date-time) Required
          • id string Required
          • fullName string Required
          • firstName string Required
          • lastName string Required
          • originalFullName string Required
          • email string Required
          • address string Required
          • phone array[string] Required
          • phoneNational array[string] Required
          • source string Required

            Values are default, message, device_contact, whatsapp, voicemail, call_log, social, facebook, instagram, or threads.

          • linkedContacts array[object] | null Required

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

          • 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
          • 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).

          • owner object Required

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

            Hide owner attributes Show owner attributes object
            • createdAt string(date-time) Required
            • updatedAt string(date-time) Required
            • id string Required
            • name string Required
            • email string Required
            • phone array[string] Required
            • isActive boolean Required
            • isEmailVerified boolean Required
            • lastActive string(date-time) Required
            • roles 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
              • 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
            • onboardingStatus string | null Required
            • userType string | null Required
            • firstName string Required
            • lastName string Required
            • initials string Required
            • userOrganizations array[object]

              Only filled on the signed-in user's own profile; absent or empty on a user nested in another record.

          • initials string Required
          • conversations array[string]
          • isEdited boolean Required

            True when the name differs from the one on the device

        • 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
        • isFinished boolean Required
        • isArchive boolean Required
        • isSpam boolean Required
        • isSticker 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
          • 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
        • 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
          • 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
        • date string(date-time) | null Required
        • sentAt string(date-time) | null Required
        • readAt string(date-time) | null Required
        • playedAt string(date-time) | null Required
        • editedAt string(date-time) | null Required
        • deliveredAt string(date-time) | null Required
        • deletedAt string(date-time) | null Required
        • recoveredAt string(date-time) | null Required
        • retractedAt string(date-time) | null Required
        • parentMessage object Required

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

        • messageFrom string Required
        • messageTo string Required
        • service string Required
        • mimeType string Required
        • commentsCount number
        • lastCommentByUserInitials string | null Required
        • lastCommentByUserAvatarUrl string | null Required
        • messageIndex number Required
        • editHistory array[object] | null Required
        • deletedMessagesLogs object Required
        • guid string | null Required
        • reactions array[object] Required
          Hide reactions attributes Show reactions attributes object
          • reaction string | null
          • contact object | null Required

            Not loaded by any route, so always null.

        • 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 Required
        • callDurationInSeconds number Required
        • callType string Required
    • statusCode number Required
    • timestamp string(date-time) Required
POST /conversation/entries/tags/{caseId}/bulk
curl \
 --request POST 'http://api.example.com/conversation/entries/tags/{caseId}/bulk' \
 --header "Authorization: Bearer $ACCESS_TOKEN" \
 --header "Content-Type: application/json" \
 --header "organization: string" \
 --data '{
  "messages": [
    "string"
  ],
  "tagNames": [
    "string"
  ]
}'
Request examples
# Headers
organization: string

# Payload
{
  "messages": [
    "string"
  ],
  "tagNames": [
    "string"
  ]
}
Response examples (201)
{
  "data": {
    "data": {
      "createdAt": "2026-01-15T14:30:00.000Z",
      "updatedAt": "2026-01-15T14:30:00.000Z",
      "id": "507f1f77bcf86cd799439011",
      "text": "See you at 6",
      "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
        }
      ],
      "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
      },
      "device": {},
      "deviceType": "ios",
      "sender": {
        "createdAt": "2026-01-15T14:30:00.000Z",
        "updatedAt": "2026-01-15T14:30:00.000Z",
        "id": "507f1f77bcf86cd799439011",
        "fullName": "Jane Doe",
        "firstName": "Jane",
        "lastName": "Doe",
        "originalFullName": "Jane Doe",
        "email": "jane.doe@example.com",
        "address": "1 Main St, New York, NY",
        "phone": [
          "+15555550100"
        ],
        "phoneNational": [
          "(555) 555-0100"
        ],
        "source": "default",
        "linkedContacts": [
          {}
        ],
        "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
        },
        "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
          }
        },
        "owner": {
          "createdAt": "2026-01-15T14:30:00.000Z",
          "updatedAt": "2026-01-15T14:30:00.000Z",
          "id": "507f1f77bcf86cd799439011",
          "name": "Jane Doe",
          "email": "jane.doe@example.com",
          "phone": [
            "+15555550100"
          ],
          "isActive": true,
          "isEmailVerified": true,
          "lastActive": "2026-01-15T14:30:00.000Z",
          "roles": [
            "user"
          ],
          "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
          },
          "onboardingStatus": "completed",
          "userType": "attorney",
          "firstName": "Jane",
          "lastName": "Doe",
          "initials": "JD",
          "userOrganizations": [
            {}
          ]
        },
        "initials": "JD",
        "conversations": [
          "507f1f77bcf86cd799439014"
        ],
        "isEdited": false
      },
      "receiver": {
        "createdAt": "2026-01-15T14:30:00.000Z",
        "updatedAt": "2026-01-15T14:30:00.000Z",
        "id": "507f1f77bcf86cd799439011",
        "fullName": "Jane Doe",
        "firstName": "Jane",
        "lastName": "Doe",
        "originalFullName": "Jane Doe",
        "email": "jane.doe@example.com",
        "address": "1 Main St, New York, NY",
        "phone": [
          "+15555550100"
        ],
        "phoneNational": [
          "(555) 555-0100"
        ],
        "source": "default",
        "linkedContacts": [
          {}
        ],
        "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
        },
        "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
          }
        },
        "owner": {
          "createdAt": "2026-01-15T14:30:00.000Z",
          "updatedAt": "2026-01-15T14:30:00.000Z",
          "id": "507f1f77bcf86cd799439011",
          "name": "Jane Doe",
          "email": "jane.doe@example.com",
          "phone": [
            "+15555550100"
          ],
          "isActive": true,
          "isEmailVerified": true,
          "lastActive": "2026-01-15T14:30:00.000Z",
          "roles": [
            "user"
          ],
          "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
          },
          "onboardingStatus": "completed",
          "userType": "attorney",
          "firstName": "Jane",
          "lastName": "Doe",
          "initials": "JD",
          "userOrganizations": [
            {}
          ]
        },
        "initials": "JD",
        "conversations": [
          "507f1f77bcf86cd799439014"
        ],
        "isEdited": false
      },
      "isEmpty": false,
      "iMessageType": "na",
      "isFromMe": true,
      "isDelivered": true,
      "isDeleted": false,
      "isFinished": false,
      "isArchive": false,
      "isSpam": false,
      "isSticker": false,
      "isMissingMedia": false,
      "isSystemMessage": false,
      "attachment": {
        "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
      },
      "additionalAttachments": [
        {
          "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
        }
      ],
      "date": "2026-01-15T14:30:00.000Z",
      "sentAt": "2026-01-15T14:30:00.000Z",
      "readAt": "2026-01-15T14:30:00.000Z",
      "playedAt": "2026-05-04T09:42:00Z",
      "editedAt": "2026-05-04T09:42:00Z",
      "deliveredAt": "2026-01-15T14:30:00.000Z",
      "deletedAt": "2026-05-04T09:42:00Z",
      "recoveredAt": "2026-05-04T09:42:00Z",
      "retractedAt": "2026-05-04T09:42:00Z",
      "parentMessage": {},
      "messageFrom": "+15555550100",
      "messageTo": "+15555550101",
      "service": "iMessage",
      "mimeType": "image/jpeg",
      "commentsCount": 2,
      "lastCommentByUserInitials": "JD",
      "lastCommentByUserAvatarUrl": "https://files.example.com/avatars/jane-doe.png",
      "messageIndex": 42,
      "editHistory": [
        {
          "date": "2026-01-15T14:30:00.000Z",
          "text": "See you at 7"
        }
      ],
      "deletedMessagesLogs": {
        "total": 2,
        "deletedMessages": [
          {
            "ids": [
              1041,
              1042
            ],
            "startDate": "2026-01-15T14:05:00.000Z",
            "endDate": "2026-01-15T14:20:00.000Z",
            "count": 2,
            "previousId": 1040,
            "nextId": 1043,
            "prevChatId": 12,
            "nextChatId": 12,
            "isPrevMessageInSameChat": true,
            "isNextMessageInSameChat": true
          }
        ],
        "minDate": "2026-01-15T14:05:00.000Z",
        "maxDate": "2026-01-15T14:20:00.000Z"
      },
      "guid": "9F1C2B3A-4D5E-4F60-8A7B-1C2D3E4F5A6B",
      "reactions": [
        {
          "reaction": "👍",
          "contact": {}
        }
      ],
      "attachedTags": [
        {
          "tagId": "507f1f77bcf86cd799439011",
          "tag": "Important",
          "addedBy": "user",
          "addedById": "507f1f77bcf86cd799439012",
          "removedAt": "2026-05-04T09:42:00Z",
          "removedBy": "user",
          "removedById": "string"
        }
      ],
      "collectionCount": 1,
      "durationInSeconds": 32,
      "callDurationInSeconds": 125,
      "callType": "incoming"
    }
  },
  "statusCode": 201,
  "timestamp": "2026-01-15T10:15:00.000Z"
}