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 , so each image in a carousel describes itself rather than sharing one line.
per media
item
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 is_ai_generated
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.
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.