Rate Limits

Synposter applies limits at two different layers. The first is the post quota that comes with your plan, which controls how many posts you can publish through Synposter overall. The second is the per-end-user rate limit that each platform (X, LinkedIn, and so on) enforces on the OAuth tokens we hold on their behalf.

Post quota (your plan)

The Free plan is a one-time trial: you get 20 posts to try the API end-to-end, with no monthly reset. Paid plans (Starter, Growth, and Scale) come with a monthly post quota that resets at the start of each billing cycle. Once you reach the quota, further calls to POST /v1/posts respond with 429 until the next cycle begins (on paid plans) or until you upgrade (on Free).

PlanProfilesPostsReset
Free120Lifetime
Starter102,000Monthly
GrowthUnlimited5,000Monthly
ScaleUnlimited20,000Monthly

You can check your current usage at any time by calling GET /v1/usage. The cap is a hard limit, so there's no overage; once you reach it, requests come back with the following response until the next reset:

HTTP/1.1 429 Too Many Requests

{
  "error": "post_limit_reached",
  "used": 20,
  "limit": 20,
  "plan": "free",
  "upgrade_url": "https://synposter.com/pricing"
}

Profile cap

The Free and Starter plans also cap how many profiles you can create. When you've reached the limit, calling POST /v1/profiles responds with:

HTTP/1.1 402 Payment Required

{
  "error": "profile_limit_reached",
  "current": 1,
  "limit": 1,
  "plan": "free",
  "upgrade_url": "https://synposter.com/pricing"
}

Platform rate limits (per connected account)

Each social platform also enforces its own per-user rate limits on the OAuth tokens that Synposter holds. These limits apply independently to each connected account, so one user hitting their X limit doesn't affect any of your other users.

PlatformEndpointPer-user limit
XPOST /2/tweets100 / 15 min, 10,000 / 24 h

When a platform returns a rate-limited response, Synposter surfaces it on the affected per-account result as platform_rate_limited, along with a hint about when it's safe to retry.

Best practices

  • Call /v1/usage before sending a burst of posts so you can spot a hard cap coming and avoid stopping mid-burst.
  • When you get a 429, follow the upgrade_url hint and show a clear, user-friendly message to your end user that explains why their post didn't go out.
  • Avoid posting from the same end user's X account inside a tight loop. Each user has their own per-account rate budget on X (around 100 calls per 15 minutes), and burning through it affects only that one user's ability to post.