Rate limits & idempotency
Limits keep the platform fast for everyone; idempotency keeps your retries safe.
Rate limits
Limits are per key, per minute, and scale with your MyTabulon plan — Free: 120 requests (20 AI) · Plus: 300 (40 AI) · Pro: 600 (60 AI) · Max: 1,200 (120 AI). Every response includes X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, and X-RateLimit-Plan headers. A 429 includes Retry-After.
Limits by plan
Plan General AI responses
Free 120 20
Plus 300 40
Pro 600 60
Max 1,200 120Coding Plan quota
Coding Plan requests through /chat/completions and /responses are metered by usage rather than the general per-minute AI limit. Every tier has a fixed 5-hour usage pool and a separate weekly pool; higher tiers provide larger pools and more concurrent requests. When a pool is exhausted you get a 429 with rate_limit_exceeded, a Retry-After header, and x-codingplan-* headers carrying percentages and reset timestamps. Concurrency exhaustion returns concurrency_limit_exceeded. See the Coding Plan page for tier details.
Idempotency
Send an Idempotency-Key header on any POST. If the same key is sent again with the same payload, you get the original response back (with an Idempotent-Replay: true header) instead of a duplicate write. Reusing a key with a different payload returns 409 idempotency_conflict.
curl https://api.mytabulon.com/v1/invoices \
-H "Authorization: Bearer mtb_live_..." \
-H "Idempotency-Key: order-8412" \
-d '{ "client_id": "...", "due_date": "2026-07-01", "items": [...] }'