Rate limits¶
Every key uses a sliding 60-second window. When exceeded the API returns 429 Too Many Requests.
| Plan | Rpm | Calls/mo | Batch receivers |
|---|---|---|---|
| Free | 10 | 200 | — |
| Starter | 30 | 3,000 | 100 |
| Pro | 100 | 25,000 | 500 |
| Business | 300 | 150,000 | 2,000 |
| Enterprise | 1,000 | custom | 10,000 |
| Ultra | 5,000 | custom | 50,000 |
| Carrier (Tier-1) | per contract | per contract | per contract |
Carrier tier (Tier-1 / national operators). Quotas, throughput and SLA are sized per contract with intra-tenant fair-scheduling. Includes dedicated deployment (isolated VPC or on-premises via On-prem isolated deployment), 24/7 NOC under contract and a negotiated financial SLA. Talk to sales.
Response headers¶
X-RateLimit-Limit— current rpm ceilingX-RateLimit-Remaining— calls still available in the windowRetry-After— present on 429 responses
Demo keys¶
Additional hard cap of 6 rpm regardless of the nominal tier of the key.
Overage billing¶
Paid teams with a stripe_customer_id on file can opt to keep serving requests past the monthly quota instead of returning 429 Too Many Requests. Each surplus unit is billed via a Stripe out-of-cycle invoice; no service interruption.
How to enable:
- Server: env
OVERAGE_BILLING_ENABLED=true(already on in production). - Team: must have a
stripe_customer_id(created automatically on first plan checkout). - Per-unit price (configurable via
STRIPE_OVERAGE_*_CENTS):
| Metric | Price per unit (BRL) |
|---|---|
requests |
R$ 0.01 |
pdfs |
R$ 0.25 |
coverage_predict |
R$ 0.10 |
ai |
R$ 0.05 |
Response signalling:
When a request was served in overage mode (above the soft quota), the response carries:
X-Overage-Billing: true
X-Quota-Used: 1001
X-Quota-Limit: 1000
Your SDK can use this header to surface a "this call will be billed" notice to the operator. When the team is not enrolled, the default 429 behaviour is preserved.
To opt a team out of overage, clear
stripe_customer_idvia the Admin portal orPATCH /teams/{id}(eligibility cache expires after 60 s).