Chirio
Get Started
Introduction
Quickstart
How Chirio works
Authentication
Platforms
Overview
Instagram
Threads
X
LinkedIn
Supa Hub
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
Supa Hub
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

Instagram

Professional accounts, JPEG-only images, carousels and Reels — plus reel covers, alt text and the AI disclosure.
Updated 1mo ago
Overview
Threads
Caption limit2,200 characters
Media1–10 items, **required**. Images must be JPEG
Carousel2–10 items
First commentyes, up to 2,200 characters
Connection lasts60 days, refreshed automatically
Rate limit100 posts per account per 24 hours
Units per write1

What the user needs

The account must be professional
Instagram only allows publishing from Business or Creator accounts. A personal account can complete the connect flow and then fail at publish time, so check this before sending someone through.
Switching is free and takes a moment in the Instagram app: Settings → Account type and tools → Switch to professional account.

Publishing behaviour

Single image — publishes as a normal post. Must be JPEG; PNG and WebP are refused by Instagram. Single video — publishes as a Reel. That is Instagram's own behaviour, not a choice Chirio makes. 2–10 items — a carousel, in the order you send them. Video items are allowed alongside images. If any single item fails to process, the whole target fails — there is no partial carousel. See Carousels. Media is fetched by Instagram from the URL you provide, so it must stay publicly reachable until the call returns.

Reel covers

Instagram takes the first frame of a video as its cover unless you say otherwise, which is why a reel so often opens on a blurred or half-drawn still. Two ways to change it, both set on the media item:
Field
What it does
`coverUrl`A public image URL used as the cover
`thumbOffsetMs`Milliseconds into the video of a frame to use instead
coverUrl wins when both are sent — Instagram ignores the offset in that case, so Chirio drops it rather than send a parameter that does nothing. A cover image must be JPEG, 8 MB or less, sRGB. Aspect ratio should be 9:16: an off-ratio cover is not rejected, it is cropped — Instagram takes the middle 9:16 rectangle for the Reels tab and the middle 1:1 square for the feed, so anything important near an edge is lost.
Covers are for single-video posts
cover_url is a Reels-only parameter, and a carousel's videos publish as plain videos rather than reels. Chirio refuses a coverUrl on a carousel rather than sending one Instagram would silently ignore — use thumbOffsetMs there, which does apply.

Alt text

Images take altText — up to 1,000 characters of screen-reader description, set per media item, so each image in a carousel describes itself rather than sharing one line. Reels and stories take none: Instagram supports the field on images only.

Disclosing AI-generated media

Set aiGenerated: true on an Instagram target and Chirio sends Meta's self-disclosure, which Instagram surfaces as its own label. On a carousel it rides the parent container — Meta refuses it on children, so there is nothing to set per item.
is_ai_generated
This is the one Instagram-only field Chirio rejects rather than ignores when sent to another platform. A disclosure the caller asked for and silently did not get is the failure this field exists to prevent, so a 400 is the right answer where it cannot be passed on.

First comments

Supported, up to 2,200 characters, posted from the same account right after the post goes live.
If a comment fails with a permission error, the connection predates Instagram's comment permission. Reconnecting the account fixes it — the failure message says so explicitly.

Common failures

Symptom
Cause
Publish fails on a valid-looking imageNot JPEG
`invalid_post`, media requiredInstagram cannot post text alone
A cover is refused on a carousel`coverUrl` is reels-only — use `thumbOffsetMs`
A cover publishes croppedNot 9:16 — Instagram takes the middle rectangle
Comment fails on permissionsConnection predates comment permission — reconnect
Rate limited100 posts per account per 24 hours is Instagram's cap, not Chirio's
Account `expired`The 60-day credential lapsed — reconnect