Skip to content
V2 (Legacy) API ReferenceGet started

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 ParametersExpand Collapse
chatId: string
formatuuid
Body ParametersJSONExpand Collapse
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.

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

formaturi
ReturnsExpand Collapse
voice_memo: object { id, chat, created_at, 5 more }
id: string

Message identifier

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

Chat identifier

formatuuid
handles: array of 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: optional boolean

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

left_at: optional string

When they left (if applicable)

formatdate-time
status: optional "active" or "left" or "removed"

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 of string

Recipient handles (phone numbers or email addresses)

voice_memo: object { 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: optional number

Duration in milliseconds

service: optional ServiceType

Messaging service type

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

Send a voice memo to a chat

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"
        }'
{
  "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
}