Skip to main content
Postsiva accepts images and videos through POST /media/upload. Use returned media_id values in post endpoints (default_image_id, video_id, image_ids). Full API reference: Media.

Upload flow

# Simple upload (< 10 MB)
curl -X POST "https://backend.postsiva.com/media/upload" \
  -H "X-API-Key: psk_live_YOUR_KEY" \
  -F "[email protected]" \
  -F "media_type=image"
Response includes media_id — reference it in post bodies.

Large files (≥ 10 MB)

Use the chunked storage API (not query params on /upload):
  1. POST /media/storage/init — get upload_id
  2. POST /media/storage/chunk — send 1 MB chunks
  3. POST /media/storage/complete — finalize and get media_id
Video processing after upload may take time for large files. The complete step uses an extended timeout.

Supported formats

TypeFormats
ImageJPEG, PNG, GIF, WebP
VideoMP4, MOV, AVI, MKV, WebM, M4V

General requirements

RuleDetail
HTTPS URLsExternal default_image_url / video_url must be http or https
Media ID vs URLPrefer media_id or HTTPS *_url fields; Threads/Bluesky auto-upload URLs server-side
Carousel size2–20 images (LinkedIn/Instagram); 2–5 for Pinterest carousel pins
Auto-fixPostsiva letterboxes images to platform canvas sizes when normalization runs

Auto-fit canvas sizes

When image auto-fix runs, targets are:
PlatformCanvas (W × H)
LinkedIn1080 × 1080
Facebook1080 × 1350
Instagram1080 × 1350 (aspect ratio corrected)
TikTok1080 × 1920
Threads1080 × 1920
Pinterest1000 × 1500
Bluesky1000 × 1000
Upload high-resolution source images. Auto-fix preserves content with letterboxing rather than cropping arbitrarily.

Platform-specific notes

PlatformKey requirementDoc
Instagram4:5 to 1.91:1 aspect ratio; Reels videoInstagram
TikTok9:16 video preferredTikTok
YouTubeTitle required; optional custom thumbnailYouTube
Pinterestboard_id + image or videoPinterest
Blueskydefault_image_id or default_image_url; video id or URLBluesky
Threadsdefault_image_id or default_image_urlThreads
FacebookPer-page images via facebook_page_imagesFacebook
LinkedInPer-page images via linkedin_page_imagesLinkedIn

Post body media fields

FieldUse
default_image_idSingle image (most platforms)
default_image_urlDirect URL (platforms that support pull-from-URL)
image_idsCarousel — array of media IDs
video_idUploaded video media ID
video_urlDirect video URL (where supported)

Example: multi-platform image post

{
  "platforms": ["linkedin", "instagram", "facebook"],
  "default_text": "Product launch visual.",
  "default_image_id": "uploaded-media-uuid",
  "facebook": {
    "facebook_page_ids": ["756356074224043"]
  }
}

AI-generated images

Generate images from text, then post:
curl -X POST "https://backend.postsiva.com/unified/image/generate" \
  -H "Content-Type: application/json" \
  -H "X-API-Key: psk_live_YOUR_KEY" \
  -d '{"prompt": "Minimal product hero shot, white background"}'
Use returned media_id in a post request. Requires AI Composer on your plan.

Character limits

Caption and title limits

Scheduling

Schedule media posts

Media API

Upload, chunked storage, list, delete