By area
Media
Written beside the API’s code, and read from it every hour.
| Method | Path | What it does |
|---|---|---|
| GET | /v1/media/{id} | A signed download link for one attachment, recording or fax |
| Id starts with | What it is | Where the id comes from |
|---|---|---|
att_ | A message attachment | attachments in GET /v1/messages and in message webhooks |
rec_ | A call recording | recording_url, or a part's url in recordings, on a call leg |
fax_ | A fax document | fax_id in GET /v1/faxes and in fax webhooks |
A recording200 OK
{
"id": "rec_58213407",
"type": "recording",
"content_type": "audio/mp3",
"format": "mp3",
"duration": 264,
"url": "<a signed link, good for 30 minutes>",
"expires_at": "2026-09-24T14:05:12.000Z",
"part": 1,
"parts": 1,
"recording_id": 10592210,
"start_time": "2026-09-24T13:02:25.000Z"
}An attachment200 OK
{
"id": "att_902114",
"type": "attachment",
"source": "sms",
"content_type": "image/jpeg",
"filename": "side-entrance.jpg",
"size": 184220,
"url": "<a signed link, good for 30 minutes>",
"expires_at": "2026-09-24T14:05:12.000Z"
}- The
urlworks for 30 minutes and needs no key. Ask again for a fresh one. - An attachment on a text you sent answers with the link you sent it with, and no
expires_at. - A recording answers with its latest part. Add
?part=Nfor part N of a call that was parked and picked up again (from 1, oldest first). The answer names itspartofparts, itsrecording_idandstart_time. A part that does not exist answers404, and the message says how many parts there are. - A fax answers with
content_type: application/pdfand itspages. - API Messaging keys may fetch attachments only. A recording or a fax answers them
403. 404: not found, not yours, or not ready yet.410: the attachment is gone.503: storage trouble on our side. The file exists, so tell us.
