Skip to main content

API and integration limits

Understand Abyssale's API rate limits: the global 10 req/s ceiling, per-workspace endpoint budgets, and how to handle 429 errors.

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

X-RateLimit-Limit

The budget for this endpoint's tier

X-RateLimit-Remaining

How many requests you have left

X-RateLimit-Reset

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 id

What it means

What to do

request_rate_limited

You've exhausted this endpoint tier's budget

Wait for the duration in the Retry-After header, then retry

rate_limit_exceeded

The global 10 req/s ceiling, or your workspace is out of credits

Slow down, or top up your credits / upgrade

feature_not_in_plan

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:


For the complete and always-up-to-date reference, see the rate limits documentation in the Developer Hub.

Did this answer your question?