Skip to Content
Core ConceptsRate limits

Rate limits

Limits apply per API key, not per plan.

LimitValue
Burst50 requests per second
Sustained600 requests per minute
Heavier operationsTheir own per-minute limits; for example invoice writes 120 per minute and submissions 60 per minute

A refused request is answered 429 with errorCode SYS005, a Retry-After header giving the seconds to wait, and the state of the most constrained limit:

HeaderMeaning
X-RateLimit-LimitThe size of the limit that refused you
X-RateLimit-RemainingRequests left in it
X-RateLimit-ResetSeconds until it refills
{ "meta": { "statusCode": 429, "success": false, "message": "Too many requests", "errorCode": "SYS005", "errors": [], "timestamp": "2026-10-01T10:00:00.000Z", "requestId": "01K6P3Z0X7Q4N2M8R9V1T5B3Y7" }, "data": null }

Staying under the limits

  • Honour Retry-After. Do not retry a 429 sooner.
  • Use webhooks instead of polling where you can. Where you must poll, poll the invoices you are waiting on, not everything.
  • Use POST /i/v1/invoices/batch-submit to submit many invoices in one request.
  • Cache reference data. Code lists, plans and credit costs change rarely.
  • Spread scheduled jobs. Sixty submissions in one second will meet the burst limit; the same sixty over a minute will not.