Token-based limits
Every authenticated request costs tokens. Your tier sets your budget: the rate, in tokens per second, at which your balance refills. Your sustained rate for an endpoint isbudget ÷ cost.
Most requests cost the default of 10 tokens. For endpoints that cost more or less, GET /account/endpoint_costs is the authoritative list of non-default costs currently in effect.
Read and Write buckets
You have two independent token budgets:
The split is by operation type, not by protocol. REST and FIX requests drain the same buckets.
Sharded exchanges have per-shard Write budgets
A single order write that explicitly targets an exchange shard draws from a Write bucket scoped to that shard, and each shard’s bucket carries your full tier budget:- Single REST order creates, cancels, decreases, and amends:
exchange_index >= 1is billed to that shard’s Write bucket. Shard 0 traffic (exchange_index: 0) bills your unscoped Write bucket. Auto-routed traffic (exchange_index: -1, or omitted whenmarket_tickeris provided) is billed to every shard’s Write bucket. - FIX New Order Single (35=D), Order Cancel Request (35=F), and Order Cancel/Replace Request (35=G):
ExDestination(tag 100) with a value>= 1is billed to that shard’s Write bucket. Messages without tag 100, or with0or-1, are billed to your unscoped Write bucket. RFQ quote accepts (35=D carryingQuoteID) always bill the unscoped Write bucket. - Batch REST creates and cancels always bill their total per-order cost to your unscoped Write bucket, regardless of
exchange_index.
Bucket capacity and bursting
Each budget is a token bucket. The bucket refills continuously at your per-second budget, up to its capacity, and a request is allowed whenever the bucket holds enough tokens to cover its cost. There are no fixed windows and no per-second resets. Basic and Advanced Predictions Read buckets, and Write buckets above the Basic tier, hold up to two seconds of budget. When you spend less than your budget, unspent tokens accumulate, and after two quiet seconds the bucket is full. You can then spend up to twice your per-second budget in a single burst before throttling back to the refill rate. This favors event-driven clients that sit idle most of the time and place a block of orders when the market moves. Predictions Read buckets above Advanced, Perps Read buckets, and Basic-tier Write buckets hold one second of budget. You can spend a full second’s budget at once, but idle time banks nothing beyond that.Example
A Premier Write bucket refills at 1,000 tokens per second and holds up to 2,000. At the default cost of 10 tokens per order, it sustains 100 orders per second.When you hit the limit
A rate-limited request returns429 Too Many Requests with the body:
Retry-After or X-RateLimit-* headers. There is no penalty or cooldown. The bucket keeps refilling, and your next request succeeds once the balance covers its cost. At a 1,000 tokens-per-second refill, a 10-token order is covered again 10 ms after a 429. Apply exponential backoff on 429.
Batch endpoints don’t save tokens
A batch request costs the same as making each call individually. Every item in the batch is billed separately:- Batch Create Orders: submitting 25 orders costs
25 × 10 = 250tokens. - Batch Cancel Orders: cancelling 25 orders costs
25 × 2 = 50tokens.
Perps limits use separate buckets
The Perps API uses the same bucket mechanics, including the two-second Write bucket above Basic, but perps traffic is metered in its own Read and Write buckets. Perps calls do not draw down your event-contract budgets, and event-contract calls do not draw down your perps budgets. In effect you have up to four independent buckets: event-contract Read, event-contract Write, perps Read, and perps Write. Check your perps tier and limits withGET /account/limits/perps, the perps counterpart of GET /account/limits.
See the Perps API overview for the full perps surface.
Tiers and budgets
Per-second token budgets in each event-contract bucket:| Tier | Read budget | Write budget |
|---|---|---|
| Basic | 200 | 100 |
| Advanced | 300 | 300 |
| Expert | 600 | 600 |
| Premier | 1,000 | 1,000 |
| Paragon | 2,000 | 2,000 |
| Prime | 4,000 | 4,000 |
| Prestige | 10,000 | 8,000 |
Tier qualification
- Basic: complete account signup.
- Advanced: call the Upgrade Account API Usage Level endpoint.
- Expert, Premier, Paragon, Prime, and Prestige: earned automatically from your trading volume (see Earning higher tiers below), or assigned by Kalshi.
Earning higher tiers by volume
Once a day, Kalshi reviews your trading volume and grants Expert, Premier, Paragon, Prime, or Prestige if you qualify. Your volume share is your trailing 30-day volume (counting both sides of every trade you are part of, as maker and as taker) divided by twice the previous calendar month’s total exchange volume:volume share = your trailing 30-day volume ÷ (previous month's exchange volume × 2)
A qualifying review grants the tier for 30 days, and each daily review renews the window while you keep qualifying. Each tier has a higher Earn threshold to gain it and a lower Keep threshold to hold it, so a brief dip does not cost you the tier:
If your volume falls below the Keep threshold, the tier does not drop immediately. It lapses when your current 30-day grant runs out.
Your grants
Your tier is the highest level among your active grants. Each grant raises you to a level on one lane,event_contract (predictions) or margined (perps), until it expires, and records its source:
volume: earned automatically from your trading volume.manual: assigned by Kalshi.
GET /account/limits, returned alongside your current usage_tier:
expires_ts is permanent. You keep your best grant at each level: a longer-lived manual grant is never shortened by a volume grant, and if you qualify by volume while holding a manual grant near expiry, the grant is extended to a fresh 30 days.