Browse docs
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.
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.jpgMulti-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.
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.