iMessage only — audio messages are not supported on SMS lines. Some
lines don’t support audio messages; sending from one of those returns
400 advanced_features_required.
Inbound voice memos are delivered through the standard message.receivedwebhook. The message payload sets is_audio_message: true
and the audio attachment includes a transcription field with the text that
iMessage auto-generates on-device:
{ "event": "message.received", "data": { "id": "msg_abc123", "chat_id": "cht_def456", "sender": "+15559876543", "text": null, "is_from_me": false, "is_audio_message": true, "attachments": [ { "filename": "Audio Message.caf", "mime_type": "audio/x-caf", "size": 24576, "url": "https://files.messages.dev/...", "transcription": "Hey, can you grab milk on the way home?" } ], "sent_at": 1710000000000 }, "timestamp": 1710000000123}
Download the audio bytes from attachments[0].url and use transcription to
read what was said without running speech-to-text yourself.
transcription is generated by Apple on the receiving Mac and may be null
on the first delivery if it hasn’t finished yet (usually within a couple of
seconds). Non-voice-memo audio attachments (e.g. a drag-and-dropped MP3)
arrive with is_audio_message: false and no transcription.