Skip to main content

Default tiers

Each team gets the following bursting capacity. The bucket refills at the sustained rate. Limits may change. We raise limits without notice — a loosening never breaks your integration — and announce any reduction in advance in the changelog. Always treat the X-RateLimit-Limit response header as the authoritative current value; don’t hard-code the numbers below into retry logic. Character synthesis is limited below the image endpoint because each create or resynthesize fans out to four image generations internally. At 15 creates/minute that is 60 image generations/minute — matching the POST /v1/images budget. The three synthesis routes share one bucket (see the note under Implementation notes below).

Headers on every response

  • X-RateLimit-Limit is the bucket capacity for this endpoint class.
  • X-RateLimit-Remaining is the tokens left after this request.
  • X-RateLimit-Reset is the epoch second at which the bucket would be back to full, assuming no further requests.

When you hit the limit

Sleep Retry-After seconds and retry. Don’t hammer — the bucket only refills at the sustained rate. The message names the endpoint class you exceeded — for example characters_synthesize rather than the images_post shown above. Switch on error.code (always too_many_requests), never on the human-readable message string.

Implementation notes

  • Limits are per-team, keyed off the API key’s team_id. Multiple keys on the same team share the bucket.
  • Bucket counts are atomic across concurrent requests on the same team — no race window between read and write.
  • Each endpoint class has its own bucket, so heavy POST traffic doesn’t starve your reads.
  • POST /v1/images/:id/cancel is bucketed under images_post regardless of whether the canceled generation is img_* or vid_* (single shared bucket on the cancel route — a pure-video team’s cancel storm would still draw from images_post). Runaway cancels can’t drain the GET read bucket.
  • Character synthesis shares one per-team bucket across POST /v1/characters, POST /v1/characters/{id}/refs/regenerate, and POST /v1/characters/{id}/resynthesize. A burst of regenerations or resynthesizes draws down the same 30-token bucket as new creates — they are not independently budgeted. If you batch-onboard characters while also regenerating poses, budget both against the single 15/minute sustained rate. Note that regenerate mints a single pose but still draws one full token from this bucket (which is sized for 4-pose creates), so a regenerate-heavy workload is capped at 15/minute even though it produces fewer images. (X-RateLimit-Remaining reflects consumption across all three routes.)

Need a higher tier?

Email support@aurous-labs.com with your team ID and expected workload.