## Get all messages in a thread

`client.Messages.ListMessagesThread(ctx, messageID, query) (*ListMessagesPagination[Message], error)`

**get** `/v3/messages/{messageId}/thread`

Retrieve all messages in a conversation thread. Given any message ID in the thread,
returns the originator message and all replies in chronological order.

If the message is not part of a thread, returns just that single message.

Supports pagination and configurable ordering.

### Parameters

- `messageID string`

- `query MessageListMessagesThreadParams`

  - `Cursor param.Field[string]`

    Pagination cursor from previous next_cursor response

  - `Limit param.Field[int64]`

    Maximum number of messages to return

  - `Order param.Field[MessageListMessagesThreadParamsOrder]`

    Sort order for messages (asc = oldest first, desc = newest first)

    - `const MessageListMessagesThreadParamsOrderAsc MessageListMessagesThreadParamsOrder = "asc"`

    - `const MessageListMessagesThreadParamsOrderDesc MessageListMessagesThreadParamsOrder = "desc"`

### Returns

- `type Message struct{…}`

  - `ID string`

    Unique identifier for the message

  - `ChatID string`

    ID of the chat this message belongs to

  - `CreatedAt Time`

    When the message was created

  - `IsDelivered bool`

    Whether the message has been delivered

  - `IsFromMe bool`

    Whether this message was sent by the authenticated user

  - `IsRead bool`

    Whether the message has been read

  - `UpdatedAt Time`

    When the message was last updated

  - `DeliveredAt Time`

    When the message was delivered

  - `Effect MessageEffect`

    iMessage effect applied to a message (screen or bubble effect)

    - `Name string`

      Name of the effect. Common values:

      - Screen effects: confetti, fireworks, lasers, sparkles, celebration, hearts, love, balloons, happy_birthday, echo, spotlight
      - Bubble effects: slam, loud, gentle, invisible

    - `Type MessageEffectType`

      Type of effect

      - `const MessageEffectTypeScreen MessageEffectType = "screen"`

      - `const MessageEffectTypeBubble MessageEffectType = "bubble"`

  - `From string`

    DEPRECATED: Use from_handle instead. Phone number of the message sender.

  - `FromHandle ChatHandle`

    The sender of this message as a full handle object

    - `ID string`

      Unique identifier for this handle

    - `Handle string`

      Phone number (E.164) or email address of the participant

    - `JoinedAt Time`

      When this participant joined the chat

    - `Service ServiceType`

      Messaging service type

      - `const ServiceTypeiMessage ServiceType = "iMessage"`

      - `const ServiceTypeSMS ServiceType = "SMS"`

      - `const ServiceTypeRCS ServiceType = "RCS"`

    - `IsMe bool`

      Whether this handle belongs to the sender (your phone number)

    - `LeftAt Time`

      When they left (if applicable)

    - `Status ChatHandleStatus`

      Participant status

      - `const ChatHandleStatusActive ChatHandleStatus = "active"`

      - `const ChatHandleStatusLeft ChatHandleStatus = "left"`

      - `const ChatHandleStatusRemoved ChatHandleStatus = "removed"`

  - `Parts []MessagePartUnion`

    Message parts in order (text, media, and link)

    - `type TextPartResponse struct{…}`

      A text message part

      - `Reactions []Reaction`

        Reactions on this message part

        - `Handle ChatHandle`

        - `IsMe bool`

          Whether this reaction is from the current user

        - `Type ReactionType`

          Type of reaction. Standard iMessage tapbacks are love, like, dislike, laugh, emphasize, question.
          Custom emoji reactions have type "custom" with the actual emoji in the custom_emoji field.
          Sticker reactions have type "sticker" with sticker attachment details in the sticker field.

          - `const ReactionTypeLove ReactionType = "love"`

          - `const ReactionTypeLike ReactionType = "like"`

          - `const ReactionTypeDislike ReactionType = "dislike"`

          - `const ReactionTypeLaugh ReactionType = "laugh"`

          - `const ReactionTypeEmphasize ReactionType = "emphasize"`

          - `const ReactionTypeQuestion ReactionType = "question"`

          - `const ReactionTypeCustom ReactionType = "custom"`

          - `const ReactionTypeSticker ReactionType = "sticker"`

        - `CustomEmoji string`

          Custom emoji if type is "custom", null otherwise

        - `Sticker ReactionSticker`

          Sticker attachment details when reaction_type is "sticker". Null for non-sticker reactions.

          - `FileName string`

            Filename of the sticker

          - `Height int64`

            Sticker image height in pixels

          - `MimeType string`

            MIME type of the sticker image

          - `URL string`

            Presigned URL for downloading the sticker image (expires in 1 hour).

          - `Width int64`

            Sticker image width in pixels

      - `Type TextPartResponseType`

        Indicates this is a text message part

        - `const TextPartResponseTypeText TextPartResponseType = "text"`

      - `Value string`

        The text content

      - `TextDecorations []TextDecoration`

        Text decorations applied to character ranges in the value

        - `Range []int64`

          Character range `[start, end)` in the `value` string where the decoration applies.
          `start` is inclusive, `end` is exclusive.
          *Characters are measured as UTF-16 code units. Most characters count as 1; some emoji count as 2.*

        - `Animation TextDecorationAnimation`

          Animated text effect to apply. Mutually exclusive with `style`.

          - `const TextDecorationAnimationBig TextDecorationAnimation = "big"`

          - `const TextDecorationAnimationSmall TextDecorationAnimation = "small"`

          - `const TextDecorationAnimationShake TextDecorationAnimation = "shake"`

          - `const TextDecorationAnimationNod TextDecorationAnimation = "nod"`

          - `const TextDecorationAnimationExplode TextDecorationAnimation = "explode"`

          - `const TextDecorationAnimationRipple TextDecorationAnimation = "ripple"`

          - `const TextDecorationAnimationBloom TextDecorationAnimation = "bloom"`

          - `const TextDecorationAnimationJitter TextDecorationAnimation = "jitter"`

        - `Style TextDecorationStyle`

          Text style to apply. Mutually exclusive with `animation`.

          - `const TextDecorationStyleBold TextDecorationStyle = "bold"`

          - `const TextDecorationStyleItalic TextDecorationStyle = "italic"`

          - `const TextDecorationStyleStrikethrough TextDecorationStyle = "strikethrough"`

          - `const TextDecorationStyleUnderline TextDecorationStyle = "underline"`

    - `type MediaPartResponse struct{…}`

      A media attachment part

      - `ID string`

        Unique attachment identifier

      - `Filename string`

        Original filename

      - `MimeType string`

        MIME type of the file

      - `Reactions []Reaction`

        Reactions on this message part

        - `Handle ChatHandle`

        - `IsMe bool`

          Whether this reaction is from the current user

        - `Type ReactionType`

          Type of reaction. Standard iMessage tapbacks are love, like, dislike, laugh, emphasize, question.
          Custom emoji reactions have type "custom" with the actual emoji in the custom_emoji field.
          Sticker reactions have type "sticker" with sticker attachment details in the sticker field.

        - `CustomEmoji string`

          Custom emoji if type is "custom", null otherwise

        - `Sticker ReactionSticker`

          Sticker attachment details when reaction_type is "sticker". Null for non-sticker reactions.

      - `SizeBytes int64`

        File size in bytes

      - `Type MediaPartResponseType`

        Indicates this is a media attachment part

        - `const MediaPartResponseTypeMedia MediaPartResponseType = "media"`

      - `URL string`

        Presigned URL for downloading the attachment (expires in 1 hour).

    - `type LinkPartResponse struct{…}`

      A rich link preview part

      - `Reactions []Reaction`

        Reactions on this message part

        - `Handle ChatHandle`

        - `IsMe bool`

          Whether this reaction is from the current user

        - `Type ReactionType`

          Type of reaction. Standard iMessage tapbacks are love, like, dislike, laugh, emphasize, question.
          Custom emoji reactions have type "custom" with the actual emoji in the custom_emoji field.
          Sticker reactions have type "sticker" with sticker attachment details in the sticker field.

        - `CustomEmoji string`

          Custom emoji if type is "custom", null otherwise

        - `Sticker ReactionSticker`

          Sticker attachment details when reaction_type is "sticker". Null for non-sticker reactions.

      - `Type LinkPartResponseType`

        Indicates this is a rich link preview part

        - `const LinkPartResponseTypeLink LinkPartResponseType = "link"`

      - `Value string`

        The URL

  - `PreferredService ServiceType`

    Messaging service type

  - `ReadAt Time`

    When the message was read

  - `ReplyTo ReplyTo`

    Indicates this message is a threaded reply to another message

    - `MessageID string`

      The ID of the message to reply to

    - `PartIndex int64`

      The specific message part to reply to (0-based index).
      Defaults to 0 (first part) if not provided.
      Use this when replying to a specific part of a multipart message.

  - `SentAt Time`

    When the message was sent

  - `Service ServiceType`

    Messaging service type

### Example

```go
package main

import (
  "context"
  "fmt"

  "github.com/linq-team/linq-go"
  "github.com/linq-team/linq-go/option"
)

func main() {
  client := linqgo.NewClient(
    option.WithAPIKey("My API Key"),
  )
  page, err := client.Messages.ListMessagesThread(
    context.TODO(),
    "69a37c7d-af4f-4b5e-af42-e28e98ce873a",
    linqgo.MessageListMessagesThreadParams{

    },
  )
  if err != nil {
    panic(err.Error())
  }
  fmt.Printf("%+v\n", page)
}
```

#### Response

```json
{
  "messages": [
    {
      "id": "69a37c7d-af4f-4b5e-af42-e28e98ce873a",
      "chat_id": "94c6bf33-31d9-40e3-a0e9-f94250ecedb9",
      "created_at": "2024-01-15T10:30:00Z",
      "is_delivered": true,
      "is_from_me": true,
      "is_read": false,
      "updated_at": "2024-01-15T10:30:00Z",
      "delivered_at": "2024-01-15T10:30:10Z",
      "effect": {
        "name": "confetti",
        "type": "screen"
      },
      "from": "+12052535597",
      "from_handle": {
        "id": "550e8400-e29b-41d4-a716-446655440000",
        "handle": "+15551234567",
        "joined_at": "2025-05-21T15:30:00.000-05:00",
        "service": "iMessage",
        "is_me": false,
        "left_at": "2019-12-27T18:11:19.117Z",
        "status": "active"
      },
      "parts": [
        {
          "reactions": [
            {
              "handle": {
                "id": "69a37c7d-af4f-4b5e-af42-e28e98ce873a",
                "handle": "+15551234567",
                "joined_at": "2025-05-21T15:30:00.000-05:00",
                "service": "iMessage",
                "is_me": false,
                "left_at": "2019-12-27T18:11:19.117Z",
                "status": "active"
              },
              "is_me": false,
              "type": "love",
              "custom_emoji": null,
              "sticker": {
                "file_name": "sticker.png",
                "height": 420,
                "mime_type": "image/png",
                "url": "https://cdn.linqapp.com/attachments/a1b2c3d4/sticker.png?signature=...",
                "width": 420
              }
            }
          ],
          "type": "text",
          "value": "Hello!",
          "text_decorations": [
            {
              "range": [
                0,
                5
              ],
              "animation": "shake",
              "style": "bold"
            }
          ]
        }
      ],
      "preferred_service": "iMessage",
      "read_at": "2024-01-15T10:35:00Z",
      "reply_to": {
        "message_id": "550e8400-e29b-41d4-a716-446655440000",
        "part_index": 0
      },
      "sent_at": "2024-01-15T10:30:05Z",
      "service": "iMessage"
    }
  ],
  "next_cursor": "eyJpZCI6IjEyMzQ1Njc4OTAiLCJ0cyI6MTYzMDUwMDAwMH0="
}
```
