API referenceMedia
Start a file upload
POST
Declare the file; PUT its bytes to upload.url with exactly upload.headers within 15 minutes; then send it with mediaId. Pass connectionId to check the channel’s limits up front.
ApiKeyheader
AuthorizationBearer <token>An API key from Developers → API keys: Authorization: Bearer gauge_live_… (or pulse_k_live_…).
Gauge-Version?stringA dated version. Default 2026-10-21.
Idempotency-Key*stringRequired on every POST. Retries with the same key replay the first response for 24 h.
Length
1 <= length <= 255application/json- body
contentType*stringMatch
^[a-z0-9.+-]+\/[a-z0-9.+-]+$Length
3 <= length <= 127sizeBytes*integerRange
1 <= valuefilename?stringLength
1 <= length <= 200connectionId?stringFormat
uuidThe media and its presigned upload.
application/json- response
id*stringFormat
uuidcontentType*stringsizeBytes*integerfilename*string|nullstatus*stringValue in
"pending""uploaded"createdAt*stringexpiresAt*stringupload*|nulldownload*|nullcurl -X POST 'https://app.gauge.chat/api/v2/media' \ -H 'Idempotency-Key: string' \ -H 'Content-Type: application/json' \ -d '{ "contentType": "string", "sizeBytes": 1}'Example Response
{ "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "contentType": "string", "sizeBytes": 0, "filename": "string", "status": "pending", "createdAt": "string", "expiresAt": "string", "upload": { "url": "http://example.com", "method": "PUT", "headers": { "property1": "string", "property2": "string" }, "expiresAt": "string" }, "download": { "url": "http://example.com", "expiresAt": "string" }}