Posts
Upload media file
Upload an image or video from your machine and attach it to a post.
POST
For attaching media from a public URL instead of uploading bytes, use
POST /posts/{post}/media/from-url.
Path parameters
The UUID of the post to attach the file to.
Request
Send asmultipart/form-data with a single media field.
The file to upload. Must be one of the allowed types:
- Images:
image/jpeg,image/png,image/gif,image/webp— up to 10 MB - Videos:
video/mp4,video/quicktime(MOV) — up to 1 GB
Behaviour
- The post must belong to the caller’s current workspace; otherwise the response is
404. - The file’s MIME type is intersected with the platforms enabled on the post. For example, uploading an image to a TikTok-only post returns
422unless the post targetstiktok_photo. - Per-type size caps are enforced after MIME detection (a video over 1 GB returns
422even if the FormRequest’s overall cap allowed it). On self-hosted, caps come fromMEDIA_IMAGE_MAX_SIZE_MB/MEDIA_VIDEO_MAX_SIZE_MB. - PNG and WebP still images are normalized to JPEG (q100) at storage time for universal platform compatibility. GIF is preserved (animation kept for X / Bluesky / Mastodon). MP4 and MOV videos are stored as-is.
- The new media is stored under
medias/{uuid}.{ext}on the configured filesystem disk (local,s3, orr2) and appended to the post’smedia[]array.
Response
Returns the updated post — same shape asGET /posts/{post}, with the newly-uploaded item in media[].
On validation failure (unsupported type, file too large, no enabled platform accepts the type) the response is 422 with errors.media[].

