Chirio
Get Started
Introduction
Quickstart
How Chirio works
Authentication
Platforms
Overview
Instagram
Threads
X
LinkedIn
Guides
Connect accounts
Publish a post
Media requirements
Carousels
First comments
Idempotency and retries
Account lifecycle
Revocation and deletion
The dashboard
Billing
Plans
Metering
Quotas
Api Reference
Overview
Accounts
Posts
Errors
Changelog
Roadmap
TrademarkTrademark
Ctrl k
Search...
Sign up
Chirio
Get Started
Introduction
Quickstart
How Chirio works
Authentication
Platforms
Overview
Instagram
Threads
X
LinkedIn
Guides
Connect accounts
Publish a post
Media requirements
Carousels
First comments
Idempotency and retries
Account lifecycle
Revocation and deletion
The dashboard
Billing
Plans
Metering
Quotas
Api Reference
Overview
Accounts
Posts
Errors
Changelog
Roadmap
TrademarkTrademark© Dopler. All rights reserved.
Built with Aveiro
Guides

Media requirements

Public URLs, image and video rules per platform, and how video processing affects timing.
Updated 2d ago
Publish a post
Carousels
Media is passed by URL. Chirio never stores it:
URLs must be publicly reachable
Instagram and Threads fetch media from your URL at publish time, so anything behind auth, an expired signed URL, or a private bucket fails the target. For X and LinkedIn, Chirio downloads the bytes and re-uploads them — same requirement.
Not hosting media is deliberate: storage, CDN, scanning and retention policy are their own product, and you almost certainly already have somewhere to put a file.

Limits

The request-level cap is 10 media items, whatever the platform allows. On top of that:
Platform
Images
Video
Notes
Instagram1–10, **JPEG only**1 (single video = Reel)Media is required; 2+ items publish as a carousel
Threads0–10video items allowedText-only posts are fine
Xup to 41One video **or** up to 4 images, never both
LinkedInup to 1012+ images publish as a multi-image post; one video **or** images
Violating any of these rejects the whole request with 400 invalid_post before anything publishes, naming the platform and the rule.

Video takes time

Video does not publish instantly anywhere. The platform processes the file first, and Chirio waits for it — up to roughly four minutes per item. A video-heavy carousel can therefore take several minutes in a single call. Two consequences:
  • Set a generous client timeout, and always send an Idempotency-Key so a timeout on your side is safe to retry. See Idempotency.
  • A slow item can time out and fail that target with media_processing_timeout. Retry just that target.

Ordering

mediaItems order is preserved. For carousels it is the slide order the reader sees — see Carousels.

Practical checklist

  • Serve media over HTTPS from a stable, public URL.
  • Keep the URL alive until the call returns — for video, that can be several minutes.
  • Use JPEG for Instagram images; PNG and WebP are refused.
  • Do not mix a video and images in one X or LinkedIn post.
  • If media uploads fail on X while text posts work, the connection predates X media permission — reconnect the account.
{ "mediaItems": [{ "type": "image", "url": "https://cdn.yourapp.com/launch.jpg" }] }