Skip to content
V2 (Legacy) API ReferenceGet started

Send a voice memo to a chat

client.chats.sendVoicememo(stringchatID, ChatSendVoicememoParams { attachment_id, voice_memo_url } body, RequestOptionsoptions?): ChatSendVoicememoResponse { voice_memo }
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
chatID: string
formatuuid
body: ChatSendVoicememoParams { attachment_id, voice_memo_url }
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.

formatuuid
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.

formaturi
ReturnsExpand Collapse
ChatSendVoicememoResponse { voice_memo }

Response for sending a voice memo to a chat

voice_memo: VoiceMemo { id, chat, created_at, 5 more }
id: string

Message identifier

formatuuid
chat: Chat { id, handles, is_active, 2 more }
id: string

Chat identifier

formatuuid
handles: Array<ChatHandle { id, handle, joined_at, 4 more } >

Chat participants

id: string

Unique identifier for this handle

formatuuid
handle: string

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

joined_at: string

When this participant joined the chat

formatdate-time
service: ServiceType

Messaging service type

One of the following:
"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)

formatdate-time
status?: "active" | "left" | "removed" | null

Participant status

One of the following:
"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

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

When the voice memo was created

formatdate-time
from: string

Sender phone number

status: string

Current delivery status

to: Array<string>

Recipient handles (phone numbers or email addresses)

voice_memo: VoiceMemo { id, filename, mime_type, 3 more }
id: string

Attachment identifier

formatuuid
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

formaturi
duration_ms?: number | null

Duration in milliseconds

service?: ServiceType | null

Messaging service type

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

Send a voice memo to a chat

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);
{
  "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
}