Media
Create upload sessions, manage reusable library assets, inspect quota usage, and retrieve metadata-only media assets for message sends.
List assets
GET/v1/media
Query
| Field | Type | Notes |
|---|---|---|
limit | integer | range 1..100 |
starting_after | string | len 1..∞ |
lifecycle | "single_use" | "library" | |
status | "pending" | "ready" | "consumed" | "expired" | "deleted" | |
kind | "image" | "document" | "audio" | "video" | "sticker" |
Response
| Field | Type | Notes |
|---|---|---|
objectrequired | "list" | |
datarequired | object[] | |
has_morerequired | boolean | |
next_cursorrequired | string | null |
Create an upload session
POST/v1/media/uploads
Request body
| Field | Type | Notes |
|---|---|---|
kindrequired | "image" | "document" | "audio" | "video" | "sticker" | |
lifecyclerequired | "single_use" | "library" | |
filename | string | len 1..255 |
mime_typerequired | string | len 1..255 |
byte_lengthrequired | integer | range -∞..9007199254740991 |
Response
| Field | Type | Notes |
|---|---|---|
idrequired | string | |
objectrequired | "media_upload" | |
upload_urlrequired | string | |
upload_methodrequired | "PUT" | |
upload_headersrequired | object | |
expires_atrequired | string<ISO-8601> | pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$ |
Complete an upload
POST/v1/media/uploads/{'{asset_id}'}/complete
Response
| Field | Type | Notes |
|---|---|---|
idrequired | string | |
objectrequired | "media_asset" | |
kindrequired | "image" | "document" | "audio" | "video" | "sticker" | |
lifecyclerequired | "single_use" | "library" | |
filenamerequired | string | null | |
mime_typerequired | string | |
byte_lengthrequired | integer | range 0..9007199254740991 |
statusrequired | "pending" | "ready" | "consumed" | "expired" | "deleted" | |
expires_atrequired | string<ISO-8601> | null | |
upload_expires_atrequired | string<ISO-8601> | pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$ |
completed_atrequired | string<ISO-8601> | null | |
consumed_atrequired | string<ISO-8601> | null | |
consumed_by_message_idrequired | string | null | |
deleted_atrequired | string<ISO-8601> | null | |
trace_idrequired | string | null | |
created_atrequired | string<ISO-8601> | pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$ |
updated_atrequired | string<ISO-8601> | pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$ |
Storage usage
GET/v1/media/storage-usage
Response
| Field | Type | Notes |
|---|---|---|
objectrequired | "media_storage_usage" | |
used_bytesrequired | integer | range 0..9007199254740991 |
limit_bytesrequired | integer | range -∞..9007199254740991 |
available_bytesrequired | integer | range 0..9007199254740991 |
percent_usedrequired | number | range 0..∞ |
Retrieve metadata
GET/v1/media/{'{asset_id}'}
Response
| Field | Type | Notes |
|---|---|---|
idrequired | string | |
objectrequired | "media_asset" | |
kindrequired | "image" | "document" | "audio" | "video" | "sticker" | |
lifecyclerequired | "single_use" | "library" | |
filenamerequired | string | null | |
mime_typerequired | string | |
byte_lengthrequired | integer | range 0..9007199254740991 |
statusrequired | "pending" | "ready" | "consumed" | "expired" | "deleted" | |
expires_atrequired | string<ISO-8601> | null | |
upload_expires_atrequired | string<ISO-8601> | pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$ |
completed_atrequired | string<ISO-8601> | null | |
consumed_atrequired | string<ISO-8601> | null | |
consumed_by_message_idrequired | string | null | |
deleted_atrequired | string<ISO-8601> | null | |
trace_idrequired | string | null | |
created_atrequired | string<ISO-8601> | pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$ |
updated_atrequired | string<ISO-8601> | pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$ |
Delete media
DELETE/v1/media/{'{asset_id}'}
Response
| Field | Type | Notes |
|---|---|---|
idrequired | string | |
objectrequired | "media_asset" | |
deletedrequired | "true" |
GET /v1/media/{asset_id} returns metadata only. It never returns raw bytes, base64, or object storage keys. Uploads default to single_use; set lifecycle: "library" for media that must be reused. Send media through POST /v1/messages with message.media.asset_id.