Skip to content

Guides

Social media API: upload media for images, video, and carousels

Media never transits SkedCast's API directly — you upload straight to storage with a presigned URL, then register the object so transcoding starts. This is the real four-call sequence, condensed for a quick reference; the full walkthrough (including video covers) is the dedicated media-uploads guide.

Browse docs

5 min read

Social media API: upload media in four calls#

  • POST /media/presign — mint an assetId + upload URL. Idempotency-Key required.
  • PUT <url> — upload the raw bytes straight to storage, no auth header.
  • POST /media — register the upload; this starts virus-scanning and transcoding.
  • POST /posts — reference the assetId in mediaIds.
bash
curl -X POST https://api.skedcast.com/v1/media/presign \
  -H "Authorization: Bearer sked_live_YOUR_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{ "clientId": "<clientId>", "filename": "photo.jpg", "contentType": "image/jpeg", "sizeBytes": 482391 }'

curl -X PUT "<url from the response>" \
  -H "Content-Type: image/jpeg" \
  --data-binary @photo.jpg
Presign, then upload.

Multi-image carousels#

There's no separate "carousel" endpoint — upload each image the same way and pass all their asset ids, in order, in the base POST /posts mediaIds array (2–5 for Pinterest, more on Instagram/LinkedIn/Threads/Telegram). Per-slide alt text is a single post-level mediaAltTexts map keyed by media asset id.

Narrowing which platforms get a rendition#

By default SkedCast prepares a rendition for every platform you have a live connected account on. Pass an explicit platforms array on the register call (["youtube", "tiktok"]) to skip renditions you know you won't need — useful for large batches where you know exactly where an asset is going.

mediauploadvideocarousel

FAQ

How do I know when a video is done transcoding?
Subscribe to media.ready (the register response names it as readyEvent), or poll GET /media/:id and wait for ready: true — not for a specific status string, since the terminal value is transcoded, not "ready". See the full media-uploads guide for the polling pitfalls.
Do I have to wait for transcoding before composing a post?
No — compose immediately and the publish pipeline parks the target until the asset is ready, without burning a publish attempt.

Ready to broadcast everywhere?

Sign up free — no credit card. You land on the Free plan, and you can start a one-time 7-day Studio trial from your workspace whenever you are ready. Connect your first accounts, import a batch, and watch one post fan out across every platform.