Skip to content
Connect an agent

Media

Import a file from a URL

Flung fetches a public https file and keeps its own copy, ready to post.

POST/v1/media/import

TL;DR

QuestionAnswer
What does it do?Import a file from a URL.
What does it need?An API key or an OAuth access token.
What does it take?A JSON body with the fields below.
What does it return?Status 201 with a body of type Media.
In the SDK?flung.media.import()
As an MCP tool?import_media
What can go wrong?401 Missing, unknown, revoked or expired API key; 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

Flung fetches a public https file and keeps its own copy, ready to post. The simplest path for agents and for files already online.

Example

bash
curl -X POST 'https://api.flung.dev/v1/media/import' \  --header "Authorization: Bearer $FLUNG_API_KEY" \  --header 'Content-Type: application/json' \  --header "Idempotency-Key: $(uuidgen)" \  --data '{  "url": "https://example.com/launch.jpg"}'

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"}

Request body

The body has the type an object, with the fields below.

FieldTypeRequiredDescription
urlstringyesA public https address of the file. Flung fetches it once and keeps its own copy. at most 2048 characters.
filenamestringnoat least 1 character; at most 255 characters.

Responses

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

Response body

A 201 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
import_mediaThe same operation as an MCP tool