ChirpieDocs

Rate Limits & Pricing

What Chirpie costs, monthly post quotas, per-post overage rates, the X link-post charge, burst limits, and how to handle rate limiting.

How much does Chirpie cost?

Chirpie is free for 50 posts a month, then $9/mo (Agent), $19/mo (Starter), or $49/mo (Pro); Scale and Enterprise are custom. Every plan includes the full API, SDK, CLI, MCP server, and Skills, plus scheduling, threads, and analytics across every connected platform. There are two usage charges on top of the flat price: per-post overage past your monthly allowance, and the X link-post charge (see below). Both are billed on delivery: a post is only ever charged once it has actually reached the platform.

Quotas reset on the 1st of each month (UTC):

PlanPosts/moScheduled/moAccountsPriceExtra posts
Free50251$0Not available (hard limit)
Agent3001501$9/mo$0.03/post
Starter1,0005003$19/mo$0.03/post
Pro5,0002,50010$49/mo$0.025/post
Scale25,000+12,500+25+CustomCustom
EnterpriseUnlimitedUnlimitedUnlimitedCustomCustom

How do I change my plan?

From the dashboard billing page. Pick a plan and you are taken to Stripe Checkout; paying returns you straight to the billing page, which confirms the new plan on the spot and shows your updated limits. The plan you are on is the one marked Current plan, and its card's button is disabled. Plans above it read Upgrade, plans below it read Downgrade, and Scale reads Contact us.

  • Already subscribed? Changing plan happens in place on your existing subscription. Upgrades are charged the mid-cycle difference immediately; downgrades bank a credit against your next invoice.
  • Moving down to Free means cancelling, which you do through Manage Subscription. You keep your paid limits until the end of the period you have already paid for.
  • If your bank is still confirming the payment, the billing page says so and your new limits appear automatically as soon as it clears. There is no need to pay again.

What happens when I go over my monthly posts?

On Agent, Starter, and Pro, nothing breaks: extra posts keep publishing and are billed per post on your next invoice. On Free, they stop.

  • Free: hard monthly limit. Requests beyond 50 posts return 429 usage_limit_exceeded until the quota resets on the 1st of next month (UTC). Upgrade anytime for more capacity.
  • Agent / Starter / Pro: posts past the allowance publish as normal and are metered at your plan's per-post rate ($0.03 on Agent and Starter, $0.025 on Pro). Only the posts above the allowance are charged.
  • Scheduled posts: charged when the post actually publishes, never when you schedule it. Cancel a scheduled post before it goes out (or let it exhaust its retries and fail) and it costs nothing and gives its quota slot back.
  • Scale / Enterprise: custom quotas rather than per-post overage. Contact us at hey@chirpie.ai.

When am I charged for a scheduled post?

When it publishes, never when you schedule it. Both usage charges, per-post overage and the X link-post charge, are billed on delivery.

  • Scheduling a post reserves a slot against your monthly allowance immediately, so you always know where you stand against your quota.
  • Nothing is billed until the post actually reaches the platform.
  • Cancelling a scheduled post before it goes out costs nothing and returns its quota slot. So does a post that exhausts its retries and ends up failed.
  • The returned slot is credited to the month the post was scheduled in, even if you cancel it after the 1st of the following month.

Because X itself charges far more for them. Per X's published API pricing, X bills API operators $0.20 for a post containing a URL against $0.015 for a plain-text post, roughly 13x more to deliver the same post. Rather than raise every plan's price to cover it, Chirpie passes that cost through only on the posts that incur it.

How much is an X link post?

$0.25 per X post whose text contains a link, on paid plans, on top of your monthly allowance.

  • What counts as a link: an http(s):// URL or a bare domain X would auto-link, such as chirpie.ai. Detection matches X's own auto-linking, so a bare domain is a link post.
  • Paid plans (Agent, Starter, Pro, Scale, Enterprise): billed at $0.25 per link post. The post also counts against your monthly post quota as normal.
  • Free plan: X posts containing a link are rejected with 402 x_link_posts_require_paid_plan, before any quota is consumed. Remove the link, upgrade, or bring your own X keys.
  • Threads: each post in an X thread is judged on its own text: a 5-post thread with 2 links is charged 2 x $0.25.
  • Scheduled posts: charged when the post actually reaches X, never when it is scheduled. Cancel it before it publishes and you are not charged.
  • Your own X API keys: X accounts connected with your own X API credentials are exempt, and you pay X directly at your own rate.
  • Never charged: X posts without links, and posts to every other connected platform.

How many comment syncs do I get?

Reading the comments Chirpie has already stored is unlimited. Refreshing them from the platform is what counts, and one sync is one refresh of one post.

PlanComment syncs/moX comment reads/mo
Free200Not included
Agent1,000500
Starter5,0002,000
Pro25,00010,000
ScaleCustomCustom
EnterpriseUnlimitedUnlimited
  • A sync is a refresh, not a read. Listing the comments on a post costs nothing. A refresh is triggered automatically when the stored comments are older than the platform's refresh window, or when you ask for one with sync=true, which is honoured a minute after the last refresh of that post (15 minutes on X). See how often a listing refreshes.
  • X is metered twice, because X bills per object returned rather than per request: an X comment read unit is one reply X handed back. A busy X post therefore spends more of the X allowance than a quiet one, while still costing exactly one sync.
  • Your own X API keys: X accounts connected with your own X API credentials are exempt from the X read allowance, and you pay X directly at your own rate. They still count against the monthly sync allowance.
  • On the Free plan, a listing for an X post answers from whatever is stored with sync.status: "plan". It is a 200 with an explanation, not an error.
  • Past the allowance, listings keep working from the stored comments, with sync.status: "budget". 402 comment_read_budget_exceeded is returned only when there is nothing stored and you asked for a refresh explicitly.
  • Replies count as posts. A reply is published to the platform like any other post, so it comes out of your monthly post quota. Hiding and deleting cost nothing.

Full details on the Comments API page.

Burst Rate Limiting

The burst limit is per API key, per minute, on a sliding window, and the ceiling comes from your plan. It is separate from your monthly post quota: the burst limit counts requests, the quota counts published posts.

PlanBurst limit
Free120 requests/min
Agent600 requests/min
Starter600 requests/min
Pro1,200 requests/min
Scale1,200 requests/min
Enterprise1,200 requests/min

Every key on an account shares the plan's ceiling but counts separately, so one key running a backfill does not starve another key serving your app.

Do not hard-code the number. X-RateLimit-Limit on every response is the ceiling actually in force for the key that made the request, so a client that paces on the headers keeps working when you change plan.

Rate Limit Headers

Every authenticated /api/v1/* response carries your current burst budget, so you never have to guess:

HeaderMeaning
X-RateLimit-LimitRequests allowed per window for this key, which is your plan's ceiling from the table above
X-RateLimit-RemainingRequests left in the current window
X-RateLimit-ResetUnix timestamp, in seconds, when the window resets
Retry-AfterSeconds to wait. Present only on a 429 from the burst limiter

Retry-After is deliberately absent from the quota 429 (usage_limit_exceeded) and the account-limit 429 (account_limit_reached), because waiting frees neither a post from the monthly quota nor an account slot.

One other 429 does carry Retry-After: analytics_refresh_rate_limited, from asking analytics for a forced refresh more than once per post per 5 minutes. It is per post rather than per key, so it does not touch your burst budget.

Handling 429 Responses

When you hit a limit, the API returns 429:

{
  "error": {
    "code": "usage_limit_exceeded",
    "message": "Monthly post limit reached (50/50). Upgrade your plan."
  }
}

The burst limiter uses the same status with a different code:

{
  "error": {
    "code": "rate_limited",
    "message": "Rate limit exceeded. Try again shortly."
  }
}

Retry recipe

  1. Read Retry-After. If it is present, sleep that many seconds and retry once.
  2. If it is absent, do not retry the same request. Either a monthly quota is spent (usage_limit_exceeded) or your plan is out of account slots (account_limit_reached), and neither clears by waiting.
  3. Stay ahead of the limiter: when X-RateLimit-Remaining reaches zero, wait until X-RateLimit-Reset before sending the next request.
const res = await fetch(url, { headers });
if (res.status === 429) {
  const retryAfter = res.headers.get("Retry-After");
  if (retryAfter) {
    await new Promise((r) => setTimeout(r, Number(retryAfter) * 1000));
    // retry once
  } else {
    // quota or account limit: upgrade or free a slot, do not loop
  }
}

Best Practices

  1. Check your usage before bulk operations, using the dashboard billing page
  2. Pace on the headers, rather than retrying blindly
  3. Batch scheduling: schedule posts with staggered times rather than posting all at once
  4. Use threads: a 10-post thread is one API call (though it counts as 10 posts against your quota)
  5. Send an Idempotency-Key on anything you might retry, so a retry after a 429 cannot publish the same post twice. See Idempotency

Platform Rate Limits

In addition to Chirpie's limits, each platform enforces its own rate limits. More platforms are coming soon; the limits below cover every platform Chirpie posts to today.

X/Twitter

X enforces approximately 200 tweets/user/day. If X rate-limits your account, Chirpie returns a 502 error. Scheduled posts will be retried automatically.

Bluesky

Bluesky enforces rate limits via the AT Protocol (approximately 1,667 actions/day, 35 actions/30 seconds). If Bluesky rate-limits your account, Chirpie returns a 502 error. Scheduled posts will be retried automatically.

LinkedIn

LinkedIn enforces approximately 100 posts per day per member. If LinkedIn rate-limits your account, Chirpie returns a 502 error. Scheduled posts will be retried automatically.

Threads

Threads enforces a limit of 250 posts per 24-hour period. If Threads rate-limits your account, Chirpie returns a 502 error. Scheduled posts will be retried automatically.

Mastodon

Mastodon enforces a default limit of 300 posts per 3-hour period (varies by instance). If Mastodon rate-limits your account, Chirpie returns a 502 error. Scheduled posts will be retried automatically.

Instagram

Instagram enforces a limit of 50 posts per 24-hour period. If Instagram rate-limits your account, Chirpie returns a 502 error. Scheduled posts will be retried automatically.

Facebook

Facebook enforces a limit of 4,800 API calls per 24-hour period per page. If Facebook rate-limits your page, Chirpie returns a 502 error. Scheduled posts will be retried automatically.

Telegram

Telegram enforces approximately 30 messages per second to the same chat. If Telegram rate-limits your bot, Chirpie returns a 502 error. Scheduled posts will be retried automatically.

Character Limits

PlatformStandard LimitExtended Limit
X/Twitter280 characters25,000 (Premium)
Bluesky300 charactersNone
LinkedIn3,000 charactersNone
Threads500 charactersNone
Mastodon500 charactersNone (varies by instance)
Instagram2,200 charactersNone
Facebook63,206 charactersNone
Telegram4,096 charactersNone

More platforms coming soon.

On this page