link field on each media object.
Anatomy of a media item
Uploading
Uploads go directly to storage in three steps — the file bytes never pass through the API:- Presign —
POST /workspaces/{workspace}/media_contents/presignwith the files’name,mime, andsize. You get back a pre-signedupload_url(and a temporary mediaid) for each file, up to 10 per request. - Upload —
PUTeach file’s bytes straight to itsupload_url, replaying the returnedupload_headers. - Confirm —
POST /workspaces/{workspace}/media_contents/confirmwith theuuidsfrom step 1. The API verifies each object, moves it into the library, and returns the finalized media objects.
The old multipart
POST /media_contents upload endpoint has been removed from the public API. Always use the presign → upload → confirm flow.Folders
Folders are an organisational layer on top of the library — purely for your team’s sanity, never visible to the social network. A folder has a name, a parent (so they nest), and an order index.
The root of a workspace’s library is the workspace itself — files with no explicit folder live there.
Filtering and listing
GET /workspaces/{workspace}/media_contents supports:
folder_id— restrict to one folderpage/per_page— pagination, see Pagination
Replacing or relabeling a file
PUT /media_contents/{mediaContent} updates editable metadata — currently label and folder_id. The underlying binary is immutable; to replace a file, upload a new one and update any posts that reference the old ID.
Deletion
DELETE /media_contents/{mediaContent} is a soft delete. The file is removed from listings and can no longer be attached to new posts, but posts that already reference it continue to work — they hold their own reference to the media at the time of attachment, so deleting the library record won’t unbreak a scheduled post.
Next
Upload media
Concrete upload recipes, including bulk import.
Posts
How media is referenced from a post.