Navigation

Account

Quota and limits

Learn how generation limits, request rate limits, and signed URL caching work.

Bannerify limits two things: how many files your workspace generates each month, and how many requests one API key sends in a short window. This page covers both, what counts as a generation, and what to do when a request is refused.

Generation limits

Every plan has a monthly limit. The Free plan also has a daily limit.

Plan Per month Per day
Free 100 10
Automate 3,000 or 10,000 No daily limit
Scale 20,000 or 40,000 No daily limit
Enterprise 100,000, 500,000, or 1,000,000 No daily limit

The Free limits apply to personal workspaces. A team workspace on the Free plan cannot generate files, which is why every new team workspace starts with a 14-day Automate 3k trial. Billing explains the trial.

Both limits reset on UTC time. The daily limit resets at 00:00 UTC and the monthly limit on the first day of each UTC month. There are no overage charges. When you reach a limit, requests stop until the next reset or until you upgrade.

Billing & Usage shows how many generations you used this month. The sidebar shows the same count under Usage.

The Usage section of the sidebar with 3.5K of 10K generations
Usage in the sidebar.

What counts as a generation

A generation counts after Bannerify renders the file, and for a stored file, after the upload. A render or an upload that fails does not count.

Request Counts
createImage and createPdf Yes
createStoredImage and createStoredPdf Yes
A signed URL that renders a new image Yes
A signed URL served from the cache No
MCP tools create_image, create_pdf, and create_image_from_shapes Yes
CLI create image and create pdf Yes
Zapier, n8n, and Notion renders Yes
A download in the embedded editor, and requestContent of the embed SDK Yes
Template list, template details, and project info No
A render or an upload that fails, or a request that Bannerify refuses No

When you reach a limit

The API returns the error code USAGE_EXCEEDED. The message names the limit you hit, for example You have exceeded your monthly usage limit (100). Read error.code to detect it, because the HTTP status is 500, which other errors share.

You can wait for the next reset, upgrade your plan, or email an@bannerify.co if you need a higher limit on Enterprise.

The CLI, the MCP server, and the no-code integrations show the same error.

Rate limits

Each API key can send up to 100 requests every 10 seconds. The count is per group of endpoints, so a burst on one group does not use up the allowance of another.

Group Endpoints that share a counter Error code over the limit
Images createImage RATE_LIMITED
Signed URLs signedurl RATE_LIMITED
PDFs and stored images createPdf and createStoredImage TOO_MANY_REQUESTS
Stored PDFs createStoredPdf TOO_MANY_REQUESTS

The info, template list, and template details endpoints have no rate limit.

The counter works in fixed 10-second windows, and a new window starts at zero. Responses from createImage, createPdf, and signed URLs carry two headers:

Header Value
RateLimit-Remaining Requests left in the current window
RateLimit-Reset The time the window ends, as a Unix timestamp in milliseconds

The error message repeats the reset time. Wait until then and send the request again. For a bulk job, cap the number of requests in flight and retry with a short delay instead of retrying in a tight loop.

To raise the limit for a key, email an@bannerify.co.

Signed URL cache

Bannerify caches the image behind a signed URL for up to 7 days, and a cache hit does not count as a generation. Signed URLs explains how the cache works and how to skip it.

Stay within your quota

  • Save the result once and reuse its URL. For an email or a static page, call createStoredImage once and keep the returned URL instead of rendering on every view.
  • Reuse the same signed URL for the same data. A new URL for every page view renders every time.
  • Check Billing & Usage before you start a large batch.