## 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) ### Parameters - `chat_id: str` - `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. - `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. ### Returns - `class ChatSendVoicememoResponse: …` Response for sending a voice memo to a chat - `voice_memo: VoiceMemo` - `id: str` Message identifier - `chat: VoiceMemoChat` - `id: str` Chat identifier - `handles: List[ChatHandle]` Chat participants - `id: str` Unique identifier for this handle - `handle: str` Phone number (E.164) or email address of the participant - `joined_at: datetime` When this participant joined the chat - `service: ServiceType` Messaging service type - `"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) - `status: Optional[Literal["active", "left", "removed"]]` Participant status - `"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 - `created_at: datetime` When the voice memo was created - `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 - `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 - `duration_ms: Optional[int]` Duration in milliseconds - `service: Optional[ServiceType]` Messaging service type ### Example ```python 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) ``` #### Response ```json { "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" } } ```