Posts
Upload media file
Upload an image, video, or PDF 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
string
required
The UUID of the post to attach the file to.
Request
Send asmultipart/form-data with a single media field.
file
required
The file to upload. Must be one of the allowed types:
- Images:
image/jpeg,image/png,image/gif,image/webp— up to 10 MB (MEDIA_IMAGE_MAX_SIZE_MB) - Videos:
video/mp4,video/quicktime(MOV) — up to 1 GB (MEDIA_VIDEO_MAX_SIZE_MB) - Documents:
application/pdf— up to 100 MB (MEDIA_DOCUMENT_MAX_SIZE_MB)
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. Uploading a PDF only succeeds on platforms that accept documents (e.g. LinkedInlinkedin_post). - Per-type size caps are enforced after MIME detection. The FormRequest uses the video ceiling as an overall bound; per-type limits still apply.
- 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 / Telegram / Discord). MP4, MOV, and PDF 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[].

