Rate limits
Most Jaah API endpoints have no rate limit. The few below do, because each one sends an email, charges a card, calls the payment provider, runs the Help assistant or holds other work open. Most limits are a sliding window: a call is refused while the calls counted in the last window already reach the limit, and it is allowed again as older calls age out. Two are caps on what is open at once instead, under Open at once.
When you are limited
A refused call gets 429 Too Many Requests and a sentence in detail, for example:
{"detail": "Too many top-ups. Try again later."}
Only Download session transcript sends a Retry-After header. For the others, wait a few minutes
before trying again: a call keeps being refused until older calls leave the window. A refused call is not
counted against the limit that refused it — but where an endpoint has two limits, a call the second one
refuses has already been counted by the first.
The limits
"Per organization" counts every call from your organization together, whoever makes it; "per user" counts your own calls. Where an endpoint has both, a call must fit both.
People
| Endpoint | Limit | Counted per | detail when refused |
|---|---|---|---|
| Resend invitation | 3 per hour | invited user | Too many invitations for this user; try again later. |
| Resend invitation and Create user | 50 invitation emails per day | organization | Too many invitation emails from this organization today; try again tomorrow. |
Create user is never refused for this limit: the user is still created, and the response's
invitation is rate_limited instead of sent.
Billing
| Endpoint | Limit | Counted per | detail when refused |
|---|---|---|---|
| Create setup intent | 10 per hour, and 5 per 10 minutes per user | organization, user | Too many attempts to add a payment method. Try again later. |
| Subscribe to a plan | 10 per hour, and 5 per 10 minutes per user | organization, user | Too many attempts to subscribe. Try again later. |
| Preview subscription change, Change subscription, Cancel subscription, Undo subscription change, Abandon checkout, Pay invoice | 30 per 10 minutes, all six together | organization | Billing was changed too often. Try again in a few minutes. |
| Sync billing | 20 per 10 minutes | organization | Billing was refreshed too often. Try again in a few minutes. |
| Update billing details | 60 per 10 minutes | organization | Billing details were changed too often. Try again in a few minutes. |
| Top up the Jaah AI wallet, and the automatic recharge setting when it turns automatic recharge on | 10 per hour, both together | organization | Too many top-ups. Try again later. |
| Refund a Jaah AI top-up | 5 per hour | organization | Too many refunds. Try again later. |
Two reads have a budget too, but are never refused. Get billing
shares the 60-per-10-minutes budget of Update billing details, and over it answers without details;
it also previews the next charge at most 60 times per 10 minutes per organization, and over that its
next_charge.available is false. Get billing usage has its own 60 per
10 minutes per organization, and over it its total is reported unavailable.
Help assistant
| Endpoint | Limit | Counted per | detail when refused |
|---|---|---|---|
| Create conversation | 10 per 10 minutes | user | Too many new chats. Wait a few minutes or create a ticket. |
| Send message | 20 per 10 minutes | user | You're sending messages too fast. Wait a few minutes or create a ticket. |
The Help assistant's limits are counted by each Jaah server separately, so a burst spread across servers can briefly go past them. Build on the numbers above, not on that.
Open at once
| Endpoint | Limit | Counted per | detail when refused |
|---|---|---|---|
| Create request | 20 access requests waiting for a decision | requester | Too many open requests. Wait for a decision on one first. |
| Download session transcript | 2 downloads being assembled at once | Jaah server | 2 transcript downloads are already being assembled; try again shortly |
Waiting does not clear the first: a decision on one of your open requests does. The second answers with
Retry-After: 30.