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
Get Started

Quickstart

From an API key to a published post in four calls.
Updated 2d ago
Introduction
How Chirio works
From nothing to a published post. Four calls, a few minutes.

1. Get an API key

Sign in at chirio.dev/auth with a magic link — an account, workspace and project are created on first sign-in. Then go to Settings → API keys and create one. The full key is shown once. It looks like chirio_sk_...; only a hash of it is stored, so a lost key has to be revoked and replaced.
export CHIRIO_API_KEY=chirio_sk_...
export CHIRIO=https://chirio.dev

2. Connect a social account

Ask for an authorize URL and send your user to it.
curl -X POST "$CHIRIO/api/v1/accounts/connect" \
  -H "Authorization: Bearer $CHIRIO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "platform": "instagram",
    "profileId": "user_123",
    "redirectUrl": "https://yourapp.com/settings/social"
  }'
{ "authUrl": "https://www.instagram.com/oauth/authorize?..." }
The user authorises on the platform and lands back on your redirectUrl with the result in the query string:
https://yourapp.com/settings/social?status=success&accountId=...&platform=instagram&username=...
Store that accountId — it is what you target when publishing. Omit redirectUrl and the user lands on Chirio's own confirmation page instead.
Instagram needs a professional account
Instagram only allows publishing from Business or Creator accounts. Each platform has a requirement or two like this — see the platform pages before your first connect.

3. Publish

curl -X POST "$CHIRIO/api/v1/posts" \
  -H "Authorization: Bearer $CHIRIO_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: launch-2026-08-04" \
  -d '{
    "content": "Launch day!",
    "mediaItems": [{ "type": "image", "url": "https://cdn.yourapp.com/launch.jpg" }],
    "platforms": [{ "platform": "instagram", "accountId": "8f2c..." }]
  }'
201 Created:
{
  "post": {
    "id": "3a1e...",
    "content": "Launch day!",
    "media": [{ "type": "image", "url": "https://cdn.yourapp.com/launch.jpg" }],
    "createdAt": "2026-08-04T09:12:44.101Z",
    "targets": [
      {
        "id": "b77d...",
        "accountId": "8f2c...",
        "platform": "instagram",
        "status": "published",
        "platformPostId": "17851...",
        "url": "https://www.instagram.com/p/...",
        "error": null,
        "publishedAt": "2026-08-04T09:12:51.882Z",
        "commentStatus": "none",
        "commentId": null,
        "commentError": null
      }
    ]
  },
  "replayed": false
}
201 does not mean everything published
A 201 means the request was accepted and every target was attempted. Targets settle independently, so read post.targets[].status — published or failed — rather than treating the HTTP status as the outcome.

4. Read it back

Useful when a target was still processing — video can take minutes — or when a retried request came back with replayed: true and you want the settled state.

Where to go next

  • How Chirio works — what happens during a publish
  • Connect accounts — the OAuth flow in detail, including LinkedIn company pages
  • Publish a post — media rules, mixed results, per-platform limits
  • Idempotency and retries — making a timed-out publish safe to resend
  • Platforms — what each network allows
curl "$CHIRIO/api/v1/posts/3a1e..." -H "Authorization: Bearer $CHIRIO_API_KEY"