Skip to main content
POST
Upload from a URL
Use this when the file already sits on the web, on a CDN or in public storage, and you do not want to download it and upload it again.
The answer has the same shape as Upload a file: put its id and path on the post.

What the URL must be

  • A public https:// URL that needs no sign-in. Plain http is refused.
  • Its path, without the query string, ends in .png, .jpg, .jpeg, .gif, .webp or .mp4. AVIF, BMP, TIFF and MOV files cannot be fetched this way; send them to Upload a file.
  • It does not point at a private, local or internal address. PostQueen checks the address again when it connects.

How the file is fetched

PostQueen streams the file to storage, up to 1 GB and for at most 5 minutes. A server that declares a larger file is refused before the download starts. Once the file is in, PostQueen reads its type from the bytes, so a .png URL that serves an HTML page fails with Unsupported file type. A video comes back processing, as an upload does: poll Get media status before you post it.

If it fails

Use stable links. A signed link that expires before PostQueen fetches it fails with Failed to fetch URL.

Authorizations

Authorization
string
header
required

Your API key from Connections > API Keys, or an OAuth access token (pos_...). Send it as it is, with no Bearer prefix.

Body

application/json
url
string<uri>
required

URL of the file to upload

Response

Stored

id
string

Unique file ID

name
string

Stored file name

originalName
string | null

The name the file was uploaded under

path
string

URL of the stored file. Send it with id as a post's media

thumbnail
string | null

Thumbnail URL, set for video

alt
string | null

Alt text, when one was set

status
enum<string>

A video (MP4 or MOV) is normalized in the background and starts as processing; poll GET /media/{id}/status until it is ready before you put it on a post. Images are ready at once.

Available options:
ready,
processing,
failed
Last modified on September 23, 2026