Solutions · Security & abuse prevention
Stop abuse
before it bills you.
Rate limits per user, caps per tier, shared budgets, and a global backstop, checked inside your app before the model runs.
The problem
Abuse shows up
on the invoice.
A leaked key, a scraper, a thousand throwaway free accounts. Every abusive call costs you real money, and gateway rate limits count requests, not dollars.
How it works
Layers that know
the customer.
Every call is checked against every layer that applies: the user's rate, their plan's daily cap, their org's budget, and one backstop over everyone. Whichever runs out first stops the call.
api · rateBurst, then a steady raterate limitapi · dailyRequests a dayhard capchatModel tokens a monthlimitorg budgetSpend a day, sharedcapbackstopSpend a day, every customercaptrialBefore a card is on fileflagDefense in depth
A ceiling on
every bad day.
The same policy that prices your product limits it. No separate gateway, no second set of rules to keep in sync with your plans.
Rate limits per user
A burst, then a steady rate, per user, API key, or org. A script gets its burst and then one call a second.
Caps per tier
Free gets a daily cap, Pro a higher soft one. New accounts get no AI until a card is on file, so farming free accounts stops paying off.
Budgets and backstops
A shared budget per org, and one backstop over every customer. Count what customers pay or what calls cost you, so a bad day has a ceiling.
Pause the key
Take access away from one customer in a single call. It comes back on its own after a set time, or when you say.
Signals
See the attack
as it happens.
Every denial is an event with the customer, the plan, and the reason: over the rate, over a cap, at the backstop. Send them to Slack or your pager.
- 12:04:31
meter-governedbot42 · Free49 calls over the rate limit in 1s - 12:04:32
customer-entitlement-takenbot42 · FreeAPI access paused for 24 hours - 12:09:10
cap-threshold-crossedAcme · Pro80% of the $50 daily org budget - 12:15:47
meter-limit × 3838 Free accounts created todayEach hit its daily cap within 10 minutes - 12:16:02
cap-limitEveryoneGlobal backstop reached: AI paused, alert sent
Under the hood
Checked before
the model runs.
Every layer runs inside your app in Limitr's open-source, sandboxed engine. No extra hop to slow the check down or skip it, and it keeps working if the network doesn't.
How the engine works →policy:plans:free:entitlements:api:limit: { credit: request, value: 1000,governor_enabled: true,governor_capacity: 10,governor_refill_rate: 0.001 }
await limitr.allow('bot42', 'api', 1)