/v1/* endpoint per API key, using a sliding-window counter in Upstash Redis. Money-moving endpoints get a stricter ceiling because abuse there is more expensive than abuse on reads.
The ceilings
Counters are per API key, not per account. If you rotate a key, the new key starts with a fresh budget.
When you hit the ceiling
A request that exceeds the limit returns429 Too Many Requests with the error envelope:
Idiomatic handling
POST /v1/payments), pair this with an idempotency key so a retry that races with the original doesn’t double-spend.
Anticipating limits
X-RateLimit-Remaining on every successful response lets you proactively back off before you hit the ceiling — useful for batch flows where you’d rather slow down preemptively than handle 429s mid-stream.
What’s not rate-limited
- Webhook deliveries from Tally to your endpoint. Those follow the retry schedule regardless of your endpoint’s response time.
- Dashboard endpoints (cookie-authed). These have their own internal limits.
Asking for a higher ceiling
The default ceilings are calibrated for a typical agent product. If you have a use case that needs more throughput — bulk payouts, batched grant inspection — reach out before launch and we’ll tune the limits to your account.In the SDK
The TypeScript SDK throwsRateLimitError on 429 responses. The retry pattern lives in your application code — the SDK is a thin transport and doesn’t auto-retry. See SDK errors for the exception shape.