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

Changelog

What shipped, when.
Updated 1mo ago
Chirio
Roadmap
Notable changes to Chirio, newest first.

2026-08-20 — Video covers, alt text, and the AI disclosure

Three things a media item can now carry, all of them per item rather than per post:
  • coverUrl — a public image to use as a video's cover. Instagram takes the first frame by default, which is why a reel so often opens on a blurred still. Honoured on Instagram single-video posts and on LinkedIn.
  • thumbOffsetMs — milliseconds into the video of a frame to use instead, where you would rather point at a good moment than supply an image. Instagram only; LinkedIn refuses it and says to send coverUrl.
  • altText — up to 1,000 characters of screen-reader description on an image. Per item, so each image in a carousel describes itself.
Per target, aiGenerated: true sends Meta's is_ai_generated self-disclosure. On a carousel it rides the parent container, the only place Meta accepts it. This is the one field Chirio rejects on other platforms rather than ignoring: a disclosure you asked for and silently did not get is the failure it exists to prevent. Cover images have specs worth reading before you generate them — Instagram wants JPEG, 8 MB, sRGB and 9:16, and crops rather than refuses anything else.

2026-08-20 — Repost any post URL

POST /api/v1/reposts reshares a post Chirio never published — a colleague's announcement, an older post, anything that went out before you connected the account. Name it by URL (every X link shape works) or by platform + platformPostId, and name the accounts that should reshare it. Per-account outcomes, one network write per account. Repeat calls are billed once. X answers a repeated retweet exactly as it answers the first, so nothing in the platform's response marks a duplicate — Chirio's usage ledger keys these writes on the account and the post. That is what makes a "repost once it passes 500 likes" poll safe to run on a schedule. See the Posts reference.

2026-08-20 — Chirio owns the clock

Posts can be scheduled. Send publishAt on POST /api/v1/posts and the response is 202 with every target pending; a dispatcher runs every minute and sends the post when its time comes. POST /api/v1/posts/:id/cancel calls one off while it is still waiting. This reverses the earlier position that callers own their own clock. It stopped making sense once there was more than one caller: a self-hosted instance cannot lean on another app's cron, and a desktop client is not running at 09:00. Also shipped: , so one post can carry a different caption or a different crop per platform instead of forcing you into one post per target. Overrides work on immediate publishes too.
per-target content and mediaItems overrides

2026-08-20 — Disconnecting keeps the account's identity

DELETE /api/v1/accounts/:id now destroys the account's credentials but keeps the row, marked revoked, instead of deleting it. Reconnecting the same profile reuses the same accountId, so ids stored on your side survive a disconnect-and-reconnect cycle. Revoked accounts are hidden from GET /api/v1/accounts unless you pass includeRevoked=true, and they no longer count against your plan's connected-account cap.
Platform-initiated removals are unchanged: when someone removes Chirio from their Instagram or Threads settings, or files a data-deletion request, every row for that profile is deleted outright.

2026-08-18 — Reposts and an OpenAPI spec

POST /api/v1/posts/:id/repost reshares a post's published targets from the accounts that published them — the amplification half of "repost when it performs": poll metrics on your own schedule, and when a post crosses your threshold, call repost once. X first (a retweet of the original — repeat calls are a no-op, and Chirio bills at most one repost per target); other platforms report unsupported until their repost contracts land. A repost is one network write, with no link surcharge.
The full /api/v1 contract also ships as a machine-readable OpenAPI 3.1 spec, served at /openapi.yaml on every Chirio instance — generate clients from it instead of hand-writing requests.

2026-08-10 — Engagement metrics

GET /api/v1/posts/:id/metrics reads a post's current views, likes, comments, shares and saves — live from each platform, with the same per-target result shape as publishing. Reading is free; nothing is stored, so snapshot on your own schedule if you need a time series. Instagram and Threads accounts connected before this date must reconnect to grant the insights permissions; X needs a read-capable (paid) API tier; LinkedIn reports likes and comments. See the Posts reference.

2026-08-08 — Supa Hub

Publishing into self-hosted Supa Social hubs (e.g. Orbit) as a platform target:
  • Connect with a hub API key — or a one-time connect code the hub user generates, so the end user never handles a secret. No OAuth, and the connection never expires.
  • The first line of content becomes the hub post's title; images publish as a single image or a 2–10 item carousel.
  • A per-target spaceSlug overrides the account's default space, so one request can post to several spaces through the same account.
  • GET /api/v1/accounts/:id/spaces lists the hub's spaces (searched and paginated) for space pickers.
Also that week: X media uploads moved to the dedicated v2 chunked endpoints, and a Threads first comment now retries when the just-published post is not yet addressable — both reliability fixes, no API change.

2026-08-04 — X media uploads

Media uploads to X are more reliable, and a failed X response now carries enough detail to diagnose. Accounts connected before this date must be reconnected before they can publish media to X — permissions are fixed at the moment a user authorises, so an existing connection cannot gain them.

2026-08-03 — Billing

Metered billing is live:
  • Network writes as the billable unit — one per target, one per first comment that posts.
  • Plans with included volume, account and project caps, and overage on paid tiers.
  • Quota enforced before any platform call; 429 quota_exceeded on plans that stop at the allowance.
  • Self-serve upgrades, invoices and current-period usage in Settings → Billing.
  • X's two rates confirmed against its published rate card — $0.015 per post, $0.20 per post containing a link, which is why an X link write costs 65 units.
Also that day: a comment refused for permissions now tells you what actually fixes it, instead of repeating the platform's unhelpful copy.

2026-08-02 — Revocation and data deletion

When someone removes Chirio from their Instagram or Threads settings, their stored credentials are now deleted automatically, and platform data-deletion requests are handled end to end. See Revocation and deletion.

2026-08-02 — First comments

firstComment per target: a comment posted from the author's own account right after that target publishes — the link-in-the-comments pattern. Supported on Instagram, Threads and LinkedIn; reported unsupported on X. A comment failure never fails the post.

2026-07-31 — LinkedIn

Publishing to LinkedIn personal profiles and company pages. Text up to 3,000 characters, up to 10 images as a multi-image post or a single video, and first comments.

2026-07-30 — Carousels

Instagram and Threads carousels via ordered mediaItems. Two or more items publish as a single carousel in array order; a carousel fails atomically per target.

2026-07-29 — Idempotency

POST /api/v1/posts accepts an Idempotency-Key. A retry after a timeout returns the original post with replayed: true instead of publishing twice. See Idempotency and retries.