## Send a voice memo to a chat `client.chats.sendVoicememo(stringchatID, ChatSendVoicememoParamsbody, RequestOptionsoptions?): 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 - `chatID: string` - `body: ChatSendVoicememoParams` - `attachment_id?: string` 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?: string` 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 - `ChatSendVoicememoResponse` Response for sending a voice memo to a chat - `voice_memo: VoiceMemo` - `id: string` Message identifier - `chat: Chat` - `id: string` Chat identifier - `handles: Array` Chat participants - `id: string` Unique identifier for this handle - `handle: string` Phone number (E.164) or email address of the participant - `joined_at: string` When this participant joined the chat - `service: ServiceType` Messaging service type - `"iMessage"` - `"SMS"` - `"RCS"` - `is_me?: boolean | null` Whether this handle belongs to the sender (your phone number) - `left_at?: string | null` When they left (if applicable) - `status?: "active" | "left" | "removed" | null` Participant status - `"active"` - `"left"` - `"removed"` - `is_active: boolean` Whether the chat is active - `is_group: boolean` Whether this is a group chat - `service: ServiceType` Messaging service type - `created_at: string` When the voice memo was created - `from: string` Sender phone number - `status: string` Current delivery status - `to: Array` Recipient handles (phone numbers or email addresses) - `voice_memo: VoiceMemo` - `id: string` Attachment identifier - `filename: string` Original filename - `mime_type: string` Audio MIME type - `size_bytes: number` File size in bytes - `url: string` CDN URL for downloading the voice memo - `duration_ms?: number | null` Duration in milliseconds - `service?: ServiceType | null` Messaging service type ### Example ```typescript import LinqAPIV3 from '@linqapp/sdk'; const client = new LinqAPIV3({ apiKey: process.env['LINQ_API_V3_API_KEY'], // This is the default and can be omitted }); const response = await client.chats.sendVoicememo('f19ee7b8-8533-4c5c-83ec-4ef8d6d1ddbd', { voice_memo_url: 'https://example.com/voice-memo.m4a', }); console.log(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" } } ```