Skip to content
Connect an agent

Media

Upload the bytes

The raw file as the body, with its Content-Length.

PUT/v1/media/{id}/content

TL;DR

QuestionAnswer
What does it do?Upload the bytes.
What does it need?An API key or an OAuth access token.
What does it take?id in the path.
What does it return?Status 200 with a body of type Media.
In the SDK?flung.media.upload()
What can go wrong?401 Missing, unknown, revoked or expired API key; 404 No such file in this workspace; 422 The request failed validation; 429 Too many requests for this credential; wait for retry-after seconds. Every failure has the same error shape.

What it does

The raw file as the body, with its Content-Length. Flung reads its real type from the first bytes and refuses anything that is not an accepted image or video.

Example

bash
curl -X PUT 'https://api.flung.dev/v1/media/med_aaaaaaaaaaaaaaaaaaaaaaaa/content' \  --header "Authorization: Bearer $FLUNG_API_KEY" \  --header 'Content-Type: application/octet-stream' \  --data-binary @launch.png

A successful answer looks like this:

json
{  "id": "med_aaaaaaaaaaaaaaaaaaaaaaaa",  "contentType": "image/jpeg",  "filename": "string",  "bytes": 1,  "status": "pending",  "preview": {    "status": "processing",    "thumbnailUrl": "string",    "hlsUrl": "string",    "dashUrl": "string",    "durationSeconds": 1  },  "createdAt": "2026-11-01T09:00:00.000Z"}

Path parameters

FieldTypeRequiredDescription
idstringyes

Responses

StatusMeaningBody
200The file, now ready.Media
401Missing, unknown, revoked or expired API key.Error
404No such file in this workspace.Error
422The request failed validation.Error
429Too many requests for this credential; wait for retry-after seconds.Error

Response body

A 200 answer has the type Media.

FieldTypeRequiredDescription
idstringyes
contentTypeMediaTypeyesWhat the file really is, read from its first bytes once uploaded.
filenamestring | nullyes
bytesinteger | nullyes
status"pending" | "processing" | "ready" | "failed"yespending until its bytes arrive; ready once a post can use it.
previewobject | nullyesVideos only, where previews are set up: a thumbnail. Read the file again while processing.
preview.status"processing" | "ready" | "failed" | "skipped"yesskipped when the video is over 100 MB or this month's thumbnail allowance is used up. Posts never wait for a preview; they use the file as uploaded.
preview.thumbnailUrlstring | nullyesA JPEG frame one second in, 640 pixels wide, at an address that does not expire.
preview.hlsUrlstring | nullyesAlways null for now: streaming versions are not made.
preview.dashUrlstring | nullyesAlways null for now.
preview.durationSecondsnumber | nullyesAlways null for now.
createdAtstringyes

See also

DocWhy
API referenceEvery endpoint
SchemasEvery request and response type
ErrorsEvery error code and what to do about it