Rate limits
The SyncSnap API applies rate limiting per project so that no single project can overwhelm the service. When the limit is exceeded, the API returns 429 Too Many Requests with a JSON body and rate-limit headers (including when to retry).Limits
Limits are enforced per project (per API key), per minute, using a token-bucket algorithm (smooth rate, with burst up to the configured maximum).
Only requests that are scoped to a project (e.g. job routes with a valid API key) are rate limited. Requests without a project are not limited by this middleware.
Which endpoints are limited?
Rate limiting is applied to routes where a project is identified (e.g. after API key validation):- Auth — API key validation and related auth routes.
- Job — Create job, get job, wait for completion, and get download URL.
429 response body
When rate limited, the API responds with:Retry-After so clients know when to retry.
Response headers
For requests that are scoped to a project, the API sets these rate-limit headers on both successful and 429 responses:
On 429 responses only, the API also sets:
These headers are only present when the request is authenticated with a project.
Handling rate limits in your app
- Backend — If your server proxies to SyncSnap and you get a 429, return a sensible status and message to the client (e.g. 429 with the same
errorbody) so the frontend can show a “Too many requests, try again shortly” message. - Frontend — Use Error handling: the React SDK’s
onErroranderrorstate will receive failures from the wait endpoint. If the backend returns 429, the error message will reflect that; you can detect it (e.g.err.message.includes('rate limit')) and show a user-friendly message or retry after a short delay.