Rate Limits
The Soku API enforces rate limits to ensure fair usage and platform stability. Rate limits are applied per account and vary based on your authentication status and subscription tier.Rate Limit Tiers
Most API users with an active Soku subscription operate at the Premium tier, which allows up to 100 requests per minute.
Endpoint-Specific Rate Limits
In addition to the global tier limits above, certain endpoints enforce their own per-user rate limits. These are applied on top of your tier limit — hitting an endpoint-specific limit will return a429 even if your global tier allowance has not been exhausted.
How Rate Limiting Works
The Soku API uses a sliding window algorithm to enforce rate limits. Instead of resetting a counter at the start of each minute, the API tracks requests across a rolling 60-second window. This approach provides a more accurate and fair representation of request patterns.Burst Allowance
Each tier includes a burst allowance that lets you temporarily exceed the stated per-minute rate in short bursts. This accommodates normal traffic patterns where requests may cluster around specific operations (for example, publishing a batch of posts).Burst allowance is not a guaranteed additional capacity. If you consistently exceed your tier’s sustained limit, requests will be throttled regardless of burst behavior.
Rate Limit Headers
Every API response includes headers that report your current rate limit status:
Example response headers:
Rate Limit Exceeded
When you exceed your rate limit, the API returns a429 Too Many Requests response. The response includes a Retry-After header indicating how many seconds to wait before sending another request.
Response status: 429 Too Many Requests
Response headers:
Best Practices
Monitor rate limit headers
Check theX-RateLimit-Remaining header on every response. When remaining requests drop below a threshold (for example, 10% of your limit), slow down your request rate proactively.
Implement exponential backoff
When you receive a429 response, do not retry immediately. Use exponential backoff with jitter to space out retries:
Respect the Retry-After header
When a429 response includes a Retry-After header, wait at least that many seconds before retrying. The value is calculated by the server based on your current window and provides the most accurate retry timing.
Batch operations where possible
Instead of making many individual requests in rapid succession, consider batching work. For example, if you need to publish to multiple platforms, use a singlePOST /v1/posts call with multiple platform targets rather than separate calls per platform.