Documentation

Rate limits & usage

Two limits apply to your account, both based on your subscription plan:

  • A monthly generation quota that resets at the start of your billing period.
  • A per-minute request limit on how often you can call the rendering endpoints.
PlanGenerations/monthRequests/minute
Free5015
Starter2,00060
Pro5,000150

Both limits apply to every endpoint that renders an image: POST /api/generate, POST /api/hooks/render, and a fresh (uncached) GET /api/render.

What doesn't count toward your limit

Cached responses never count toward either limit, on any endpoint. A render is only billed and rate limited the first time it's produced; repeat requests for the same template, layers, dimensions, and format are served from cache for free.

GET /api/render is billed to the template owner

The public, unauthenticated /api/render endpoint is not exempt from rate limits. A fresh render on that endpoint counts against the monthly quota and per-minute limit of the **template's owner**, the account that created the template, not the caller. If you embed a template publicly and it gets popular, its owner's plan is what determines how much headroom you have.

429 responses

When either limit is exceeded, the endpoint returns HTTP 429 with a JSON body and a Retry-After header:

  • Per-minute limit exceeded: the body includes limit and retryAfter (seconds until the current one-minute window frees up).
  • Monthly quota exceeded: the body includes limit, used, remaining, and retryAfter (seconds until your billing period resets).

In both cases, the Retry-After header mirrors the body’s retryAfter value in seconds.