Skip to main content

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 a 429 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 a 429 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:
Response body:

Best Practices

Monitor rate limit headers

Check the X-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 a 429 response, do not retry immediately. Use exponential backoff with jitter to space out retries:

Respect the Retry-After header

When a 429 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 single POST /v1/posts call with multiple platform targets rather than separate calls per platform.

Distribute requests evenly

If you have a queue of API calls to make, spread them evenly over time rather than sending them all at once. A simple approach is to insert a small delay between requests:

Troubleshooting


Next Steps