Get all messages in a thread
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.
Query Parameters
Get all messages in a thread
curl https://api.linqapp.com/api/partner/v3/messages/$MESSAGE_ID/thread \
-H "Authorization: Bearer $LINQ_API_V3_API_KEY"{
"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="
}{
"error": {
"status": 401,
"code": 2004,
"message": "Unauthorized - missing or invalid authentication token"
},
"success": false
}{
"error": {
"status": 404,
"code": 2001,
"message": "Resource not found"
},
"success": false
}{
"error": {
"status": 500,
"code": 3006,
"message": "Internal server error"
},
"success": false
}Returns Examples
{
"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="
}{
"error": {
"status": 401,
"code": 2004,
"message": "Unauthorized - missing or invalid authentication token"
},
"success": false
}{
"error": {
"status": 404,
"code": 2001,
"message": "Resource not found"
},
"success": false
}{
"error": {
"status": 500,
"code": 3006,
"message": "Internal server error"
},
"success": false
}