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.