Retry-After header when it is present and wait that many seconds before you send the request again.
These limits are the same on every plan, and upgrading does not raise them. Post and interaction allowances per billing period are on Plans and usage.
A 429 from SocialAPI’s own limits uses the standard error envelope. error.meta.retry_after_seconds holds the same number of seconds as the Retry-After header:
Every 429 code
A request refused by
publishing.velocity_limit never reaches the platform and spends no credit.
Posting velocity caps
SocialAPI caps how fast one publish target can publish, on top of your plan’s post allowance. A publish target is one connected account, or one Facebook Page or Pinterest board when the account publishes to more than one Page or board. Each Facebook Page of a connection has its own counters.
The hourly window opens with the first publish counted in it and lasts 1 hour. The 24-hour window opens the same way and lasts 24 hours. On TikTok, the 24-hour cap of 13 binds before the hourly cap of 25.
On Instagram, SocialAPI’s cap of 45 sits below Instagram’s 50 posts per rolling 24 hours. On TikTok, SocialAPI’s cap of 13 sits below TikTok’s own limit of 15 posts per day per account. Reaching SocialAPI’s cap gives you
publishing.velocity_limit and a Retry-After, instead of a platform rejection after the attempt.
TikTok also limits publishing to 6 posts per minute per account. SocialAPI does not enforce the 6 per minute: when you send a 7th post within a minute, TikTok refuses it and the target fails with a platform.tiktok.* code.
What happens at a cap
- Immediate publish (
POST /v1/postswithpublish_now: true,POST /v1/posts/{pid}/publish,POST /v1/posts/{pid}/retry): the request returns429 publishing.velocity_limitand creates nothing.meta.windowishourorday,meta.limitis the cap reached, andmeta.account_idis the connected account. A refused request spends no post credit. - More than one target in one request: the request is all or nothing. If one target is at a cap, the whole request is refused and no target’s counter moves.
- Scheduled post: a scheduled post is never failed by a velocity cap. SocialAPI holds the target and publishes it once the window clears, so it goes out late. The wait does not count as a failed delivery.
Platform limits
Each platform limits what an app can do for an account. When the platform refuses a request for its own rate limit, SocialAPI returns429 platform.{platform}.rate_limit, for example platform.instagram.rate_limit. Match on the platform.*.rate_limit pattern to handle every platform. When the platform reports how long to wait, SocialAPI passes it on as Retry-After and error.meta.retry_after_seconds. Without them, wait at least 60 seconds, then retry with exponential backoff.
Read a platform’s remaining quota
GET /v1/accounts/{id}/limits returns the quota the platform reports for one connected account, as an object of numbers. It needs the accounts:read scope and costs no credits.
Zalo no longer reports its message quota: do not rely on
remain and total. Every platform that is neither in the table nor Zalo returns 501 resource.not_supported.
Reads and platform limits
Reading comments, reviews, mentions, and posts costs no credits, and SocialAPI applies no rate limit of its own to ordinary reads. The two sync endpoints in the table above have their own cooldowns. Reads still count against the platform’s limit for the account. To detect new comments and messages, subscribe to webhook events instead of polling. If your interface fetches the same page of results repeatedly, cache it on your side.Handling 429
1
Read Retry-After
When the response has a
Retry-After header, wait that many seconds. The same value is in error.meta.retry_after_seconds.2
Back off when there is no Retry-After
For
platform.*.rate_limit without Retry-After, wait 60 seconds, then double the wait on each further 429.3
Do not retry plan allowances
validation.post_limit_exhausted, validation.interaction_limit_exhausted, and the billing.* codes do not clear within minutes. Check GET /v1/usage and wait for period_end, or change your plan.Use from an AI agent
Related
- Plans and usage: post, interaction, storage, and export allowances per plan
- Errors: every error code with its HTTP status
- Track post delivery: what a refused or held publish looks like on the post
- Scheduling: how scheduled posts go out
- Webhook events: receive new comments and messages instead of polling