Skip to content
V2 (Legacy) API ReferenceGet started

Send a voice memo to a chat

chats.send_voicememo(strchat_id, ChatSendVoicememoParams**kwargs) -> ChatSendVoicememoResponse
POST/v3/chats/{chatId}/voicememo

Send an audio file as an iMessage voice memo bubble to all participants in a chat. Voice memos appear with iMessageโ€™s native inline playback UI, unlike regular audio attachments sent via media parts which appear as downloadable files.

Supported audio formats:

  • MP3 (audio/mpeg)
  • M4A (audio/x-m4a, audio/mp4)
  • AAC (audio/aac)
  • CAF (audio/x-caf) - Core Audio Format
  • WAV (audio/wav)
  • AIFF (audio/aiff, audio/x-aiff)
  • AMR (audio/amr)
ParametersExpand Collapse
chat_id: str
formatuuid
attachment_id: Optional[str]

Reference to a voice memo file pre-uploaded via POST /v3/attachments. The file is already stored, so sends using this ID skip the download step.

Either voice_memo_url or attachment_id must be provided, but not both.

formatuuid
voice_memo_url: Optional[str]

URL of the voice memo audio file. Must be a publicly accessible HTTPS URL.

Either voice_memo_url or attachment_id must be provided, but not both.

formaturi
ReturnsExpand Collapse
class ChatSendVoicememoResponse: โ€ฆ

Response for sending a voice memo to a chat

voice_memo: VoiceMemo
id: str

Message identifier

formatuuid
chat: VoiceMemoChat
id: str

Chat identifier

formatuuid
handles: List[ChatHandle]

Chat participants

id: str

Unique identifier for this handle

formatuuid
handle: str

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

joined_at: datetime

When this participant joined the chat

formatdate-time
service: ServiceType

Messaging service type

One of the following:
"iMessage"
"SMS"
"RCS"
is_me: Optional[bool]

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

left_at: Optional[datetime]

When they left (if applicable)

formatdate-time
status: Optional[Literal["active", "left", "removed"]]

Participant status

One of the following:
"active"
"left"
"removed"
is_active: bool

Whether the chat is active

is_group: bool

Whether this is a group chat

service: ServiceType

Messaging service type

One of the following:
"iMessage"
"SMS"
"RCS"
created_at: datetime

When the voice memo was created

formatdate-time
from_: str

Sender phone number

status: str

Current delivery status

to: List[str]

Recipient handles (phone numbers or email addresses)

voice_memo: VoiceMemoVoiceMemo
id: str

Attachment identifier

formatuuid
filename: str

Original filename

mime_type: str

Audio MIME type

size_bytes: int

File size in bytes

url: str

CDN URL for downloading the voice memo

formaturi
duration_ms: Optional[int]

Duration in milliseconds

service: Optional[ServiceType]

Messaging service type

One of the following:
"iMessage"
"SMS"
"RCS"

Send a voice memo to a chat

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
)
response = client.chats.send_voicememo(
    chat_id="f19ee7b8-8533-4c5c-83ec-4ef8d6d1ddbd",
    voice_memo_url="https://example.com/voice-memo.m4a",
)
print(response.voice_memo)
{
  "voice_memo": {
    "id": "69a37c7d-af4f-4b5e-af42-e28e98ce873a",
    "chat": {
      "id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
      "handles": [
        {
          "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"
        }
      ],
      "is_active": true,
      "is_group": true,
      "service": "iMessage"
    },
    "created_at": "2019-12-27T18:11:19.117Z",
    "from": "+12052535597",
    "status": "queued",
    "to": [
      "+12052532136"
    ],
    "voice_memo": {
      "id": "550e8400-e29b-41d4-a716-446655440000",
      "filename": "voice-memo.m4a",
      "mime_type": "audio/x-m4a",
      "size_bytes": 524288,
      "url": "https://cdn.linqapp.com/voice-memos/abc123.m4a",
      "duration_ms": 15000
    },
    "service": "iMessage"
  }
}
{
  "error": {
    "status": 400,
    "code": 1002,
    "message": "Phone number must be in E.164 format"
  },
  "success": false
}
{
  "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": 413,
    "code": 5001,
    "message": "Voice memo file too large - maximum size is 10MB"
  },
  "success": false
}
{
  "error": {
    "status": 422,
    "code": 1003,
    "message": "Request is valid but cannot be processed"
  },
  "success": false
}
{
  "error": {
    "status": 500,
    "code": 3006,
    "message": "Internal server error"
  },
  "success": false
}
Returns Examples
{
  "voice_memo": {
    "id": "69a37c7d-af4f-4b5e-af42-e28e98ce873a",
    "chat": {
      "id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
      "handles": [
        {
          "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"
        }
      ],
      "is_active": true,
      "is_group": true,
      "service": "iMessage"
    },
    "created_at": "2019-12-27T18:11:19.117Z",
    "from": "+12052535597",
    "status": "queued",
    "to": [
      "+12052532136"
    ],
    "voice_memo": {
      "id": "550e8400-e29b-41d4-a716-446655440000",
      "filename": "voice-memo.m4a",
      "mime_type": "audio/x-m4a",
      "size_bytes": 524288,
      "url": "https://cdn.linqapp.com/voice-memos/abc123.m4a",
      "duration_ms": 15000
    },
    "service": "iMessage"
  }
}
{
  "error": {
    "status": 400,
    "code": 1002,
    "message": "Phone number must be in E.164 format"
  },
  "success": false
}
{
  "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": 413,
    "code": 5001,
    "message": "Voice memo file too large - maximum size is 10MB"
  },
  "success": false
}
{
  "error": {
    "status": 422,
    "code": 1003,
    "message": "Request is valid but cannot be processed"
  },
  "success": false
}
{
  "error": {
    "status": 500,
    "code": 3006,
    "message": "Internal server error"
  },
  "success": false
}