Abyssale's API enforces rate limits to keep the platform fast and reliable for every workspace. These limits apply to direct API calls and to any integration built on the API, Zapier, Make, n8n, and the Airtable extension included. If your automation suddenly receives errors while your setup hasn't changed, a rate limit is one of the first things to check.
The global ceiling: 10 requests per second
Every workspace is limited to 10 requests per second, across all endpoints combined. This is a hard ceiling: no endpoint, key, or plan bypasses it.
Note: Generation endpoints have no separate per-endpoint budget, but they are not unlimited, the 10 requests per second ceiling still applies to them.
Per-endpoint budgets
On top of the global ceiling, each family of endpoints has its own per-workspace budget:
Endpoint family | Per minute | Per hour |
Polling (job status) | 600 | 18,000 |
Read (designs, formats, listings) | 120 | 3,000 |
Validation | 120 | 2,400 |
Write (create, update) | 60 | 1,200 |
Important: These budgets belong to the workspace, not the API key. Creating additional API keys does not multiply your budget, all keys in a workspace draw from the same pool.
Tracking your usage: rate limit headers
Budgeted endpoints return three headers on every response, so you can pace your automation before ever hitting a limit:
Header | What it tells you |
| The budget for this endpoint's tier |
| How many requests you have left |
| When the current window rolls over |
The values describe whichever window (per-minute or per-hour) you're closest to exhausting, the one you'd actually hit. A 429 response also carries a Retry-After header, in seconds.
Note: These headers are authoritative for your workspace, trust them over any figure written on this page. Their absence (on generation endpoints, for example) means "no information", not "unlimited".
What happens when you hit a limit
The API responds with an HTTP 429 and an error identifier. Three refusals share this status family, each with a different cause and remedy, always match on the id field in your code, not on the message text, which may change:
Error | What it means | What to do |
| You've exhausted this endpoint tier's budget | Wait for the duration in the |
| The global 10 req/s ceiling, or your workspace is out of credits | Slow down, or top up your credits / upgrade |
| Your plan doesn't include this design type (animated needs Pro, print needs Suite) | Upgrade your plan — retrying never helps |
Best practices for high-volume automations
Honour
Retry-After. A refused request still counts against your hourly budget: a tight retry loop digs you deeper into the limit instead of out of it.Prefer asynchronous generation with webhooks over polling. Instead of polling a job's status in a tight loop (which eats your Polling budget), register a webhook and let Abyssale notify you when the generation completes.
Batch where possible. One multi-format request costs one API call instead of one call per format.
Space out spreadsheet-driven runs. Tools like Make or n8n can fire rows in parallel, add a small delay or use their built-in rate control to stay under 10 req/s.
Don't multiply API keys to go faster. It doesn't work (budgets are per workspace) and makes key rotation harder.
Related limits elsewhere in Abyssale
These are separate mechanisms with their own rules:
Dynamic Image URLs in Test mode are limited to 10 requests per second; Production mode is built for large-scale traffic. See Creating Dynamic Images.
Credits are a consumption limit, not a rate limit, see Understanding Abyssale Credits.
For the complete and always-up-to-date reference, see the rate limits documentation in the Developer Hub.
