Skip to main content

Core concepts

Rate limits

Rate limiting is per API key over a rolling one-minute window. The default is 60 requests per minute; individual keys can be provisioned differently.

On this page

The limit

Rate limiting is per API key, enforced over a rolling one-minute window. The default is 60 requests per minute; an individual key may be provisioned with a different limit, readable as key.rate_limit_per_min from GET /api/v1/inkfree/me. Over the limit, requests return 429 with {"code": 429, "message": "Rate limit exceeded. Try again later."}.

Reading your key's limit

A key provisioned with a limit other than the default reports it as key.rate_limit_per_min on GET /api/v1/inkfree/me. The field is omitted when the account default of 60 applies.

Handling a 429

Over the limit, every endpoint returns the same body:

429 response
{
  "code": 429,
  "message": "Rate limit exceeded. Try again later."
}

The window is rolling, not fixed, so capacity returns gradually rather than all at once on a minute boundary. Back off with jitter and retry — a fixed one-minute sleep across several workers will simply collide again.

Retrying a creation call

If the request you are retrying creates an envelope, send it with an X-Idempotency-Key so a retry that races the original cannot produce two envelopes. See Idempotency.

Staying under the limit

Polling for envelope completion is an easy way to burn through the limit. Subscribing to webhooks removes that traffic entirely — Inkfree pushes each state change to you instead. If you must poll, walk the change feed with keyset cursors rather than re-reading the whole list.