Skip to main content

Rate Limits

Requests are limited over a rolling 60-second window. Most endpoints share a generous default; heavier or more sensitive operations have their own lower limits.

Limits by operation​

Requests / minuteApplies to
500Default — every endpoint not listed below
100List endpoints — GET /invoices, /estimates, /payments, /customers, /vendors, /items, /transactions
30Recording money — POST /invoices/:id/payments, POST /payments/:id/refunds
3Sending a document by email — POST /invoices/:id/send, POST /estimates/:id/send

Response headers​

Every response that clears the rate limiter carries:

HeaderMeaning
X-RateLimit-LimitRequests allowed in the current window
X-RateLimit-RemainingRequests left in the current window
X-RateLimit-ResetSeconds until the window resets

These count requests to that endpoint, and nothing else. Some operations carry their own caps on what a request does — the number of emails a send produces, for example (see Other limits). Those are checked after the rate limiter, so a 403 can arrive while X-RateLimit-Remaining still shows requests available.

When a request is rejected for going too fast it returns 429 Too Many Requests with a Retry-After header giving the seconds to wait. Nothing else in the API returns a 429, so a 429 always means "too fast, come back shortly". Limits that waiting a few seconds won't clear return 403 with an error code instead, so you never have to guess whether retrying will help.

Other limits​

These are not rate limits. They cap volume or protect deliverability, and they do not clear by retrying.

StatusCodeMeaning
403SEND_LIMIT_REACHEDA sending cap was reached. details.limit is its value and details.scope names which cap: hour, day, week, invoiceSends, invoiceRecipients or userDay
403MAIL_SENDING_SUSPENDEDSending is paused because recent emails bounced or were rejected. Correct the recipient address, then contact support

Handling limits​

  1. Send requests sequentially — await each response before starting the next. Firing requests in parallel is the most common cause of unexpected 429s.
  2. On a 429, wait for Retry-After rather than retrying immediately.
  3. Watch X-RateLimit-Remaining on high-volume jobs and pace accordingly.
  4. If your integration needs a higher limit, contact contact@invoiless.com with your use case and expected volume.