API reference

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

FieldTypeNotes
limitinteger
range 1..100
starting_afterstring
len 1..∞
lifecycle"single_use" | "library"
status"pending" | "ready" | "consumed" | "expired" | "deleted"
kind"image" | "document" | "audio" | "video" | "sticker"

Response

FieldTypeNotes
objectrequired"list"
datarequiredobject[]
has_morerequiredboolean
next_cursorrequiredstring | null

Create an upload session

POST/v1/media/uploads201 Created

Request body

FieldTypeNotes
kindrequired"image" | "document" | "audio" | "video" | "sticker"
lifecyclerequired"single_use" | "library"
filenamestring
len 1..255
mime_typerequiredstring
len 1..255
byte_lengthrequiredinteger
range -∞..9007199254740991

Response

FieldTypeNotes
idrequiredstring
objectrequired"media_upload"
upload_urlrequiredstring
upload_methodrequired"PUT"
upload_headersrequiredobject
expires_atrequiredstring<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

FieldTypeNotes
idrequiredstring
objectrequired"media_asset"
kindrequired"image" | "document" | "audio" | "video" | "sticker"
lifecyclerequired"single_use" | "library"
filenamerequiredstring | null
mime_typerequiredstring
byte_lengthrequiredinteger
range 0..9007199254740991
statusrequired"pending" | "ready" | "consumed" | "expired" | "deleted"
expires_atrequiredstring<ISO-8601> | null
upload_expires_atrequiredstring<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_atrequiredstring<ISO-8601> | null
consumed_atrequiredstring<ISO-8601> | null
consumed_by_message_idrequiredstring | null
deleted_atrequiredstring<ISO-8601> | null
trace_idrequiredstring | null
created_atrequiredstring<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_atrequiredstring<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

FieldTypeNotes
objectrequired"media_storage_usage"
used_bytesrequiredinteger
range 0..9007199254740991
limit_bytesrequiredinteger
range -∞..9007199254740991
available_bytesrequiredinteger
range 0..9007199254740991
percent_usedrequirednumber
range 0..∞

Retrieve metadata

GET/v1/media/{'{asset_id}'}

Response

FieldTypeNotes
idrequiredstring
objectrequired"media_asset"
kindrequired"image" | "document" | "audio" | "video" | "sticker"
lifecyclerequired"single_use" | "library"
filenamerequiredstring | null
mime_typerequiredstring
byte_lengthrequiredinteger
range 0..9007199254740991
statusrequired"pending" | "ready" | "consumed" | "expired" | "deleted"
expires_atrequiredstring<ISO-8601> | null
upload_expires_atrequiredstring<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_atrequiredstring<ISO-8601> | null
consumed_atrequiredstring<ISO-8601> | null
consumed_by_message_idrequiredstring | null
deleted_atrequiredstring<ISO-8601> | null
trace_idrequiredstring | null
created_atrequiredstring<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_atrequiredstring<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

FieldTypeNotes
idrequiredstring
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.