Retrieve a specific message by its ID. This endpoint returns the full message details including text, attachments, reactions, and metadata.
Get a message by ID
import os
from linq import LinqAPIV3
client = LinqAPIV3(
api_key=os.environ.get("LINQ_API_V3_API_KEY"), # This is the default and can be omitted
)
message = client.messages.retrieve(
"69a37c7d-af4f-4b5e-af42-e28e98ce873a",
)
print(message.id){
"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"
}{
"error": {
"status": 401,
"code": 2004,
"message": "Unauthorized - missing or invalid authentication token"
},
"success": false
}{
"error": {
"status": 403,
"code": 2005,
"message": "Access denied - insufficient permissions for this resource"
},
"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
{
"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"
}{
"error": {
"status": 401,
"code": 2004,
"message": "Unauthorized - missing or invalid authentication token"
},
"success": false
}{
"error": {
"status": 403,
"code": 2005,
"message": "Access denied - insufficient permissions for this resource"
},
"success": false
}{
"error": {
"status": 404,
"code": 2001,
"message": "Resource not found"
},
"success": false
}{
"error": {
"status": 500,
"code": 3006,
"message": "Internal server error"
},
"success": false
}