## Send a voice memo to a chat **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) ### Path Parameters - `chatId: string` ### Body Parameters - `attachment_id: optional 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: optional 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 - `voice_memo: object { id, chat, created_at, 5 more }` - `id: string` Message identifier - `chat: object { id, handles, is_active, 2 more }` - `id: string` Chat identifier - `handles: array of ChatHandle` 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: optional boolean` Whether this handle belongs to the sender (your phone number) - `left_at: optional string` When they left (if applicable) - `status: optional "active" or "left" or "removed"` 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 of string` Recipient handles (phone numbers or email addresses) - `voice_memo: object { id, filename, mime_type, 3 more }` - `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: optional number` Duration in milliseconds - `service: optional ServiceType` Messaging service type ### Example ```http curl https://api.linqapp.com/api/partner/v3/chats/$CHAT_ID/voicememo \ -H 'Content-Type: application/json' \ -H "Authorization: Bearer $LINQ_API_V3_API_KEY" \ -d '{ "voice_memo_url": "https://example.com/voice-memo.m4a" }' ``` #### 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" } } ```