Rate limits and plan limits

How fast you can call the API, and how much your plan allows.

There are two kinds of limits. They look alike, but you must handle them differently.

Rate limitPlan limit
Error429 rate_limited402 quota_exceeded
MeansYou are sending requests too fast.You used everything your plan allows this month.
Retry?Yes, after Retry-After seconds.No. It will keep failing until the period resets.

Rate limits

The limit is per API key, for the whole API together. Every response has these headers:

HeaderMeaning
X-RateLimit-LimitRequests allowed per minute.
X-RateLimit-RemainingRequests left this minute.
X-RateLimit-ResetSeconds until the limit resets.
Retry-After(only on 429) Seconds to wait before retrying.
Retry on 429
async function bulkit(url, options, tries = 3) {
  const res = await fetch(url, options);
  if (res.status === 429 && tries > 0) {
    const wait = Number(res.headers.get("Retry-After") ?? 1);
    await new Promise((r) => setTimeout(r, wait * 1000));
    return bulkit(url, options, tries - 1);
  }
  return res;
}

Plan limits

Check what you have used with GET /usage:

curl "$BULKIT_URL/usage" -H "x-api-key: $BULKIT_API_KEY"
Response (shortened)
{
  "plan": "pro",
  "periodStart": "2026-09-01T00:00:00.000Z",
  "periodEnd": "2026-10-01T00:00:00.000Z",
  "posts": {
    "created": { "used": 412, "limit": 1000 },
    "published": 398
  },
  "channels": { "used": 6, "limit": 10 },
  "storage": { "bytesUsed": 52428800, "bytesLimit": 5368709120 }
}
  • posts.created is the number that decides if your next post is refused.
  • posts.published is how many posts really reached a platform. This is what you are billed for.
  • periodEnd is when the monthly numbers reset.
  • limit: null means unlimited.
  • channels and storage do not reset. They go down when you disconnect an account or delete a file.
  • Usage counts the whole account, across all its workspaces.
  • GET /usage needs a key with read permission.

Use GET /usage, not GET /stats, to check limits. Stats change when you delete posts; usage is what your bill is based on.

Platform limits

Each social network has its own rules: characters, number of images, video length, threads. Get them from GET /platforms and don't write them in your code — they change. See also the Platforms pages.

On this page