When to use rate limiting
Prevent abuse
Stop bad actors from hammering your endpoints or scraping your data.
Protect costs
Limit expensive operations (AI calls, database queries) before they blow up your bill.
Fair usage
Ensure no single user monopolizes shared resources.
Compliance
Enforce contractual limits (e.g., 10,000 requests/month on a Basic plan).
How it works
Choose an identifier
Decide what you’re limiting: a user ID, API key, IP address, organization, or any string that uniquely identifies the requester.
Set the limit
Define how many requests are allowed and over what duration. Example: 100 requests per minute.
Quick example
Standalone vs Key-attached rate limits
Unkey offers two ways to rate limit:| Approach | Best for | How it works |
|---|---|---|
| Standalone | Any endpoint, public or private | You call limiter.limit() with any identifier |
| Key-attached | API key authenticated endpoints | Rate limits are configured per-key and checked during keys.verify() |
What makes Unkey rate limiting different?
No infrastructure to manage
No infrastructure to manage
No Redis clusters, no Upstash accounts, no connection strings. Just install the SDK and go.
Globally distributed
Globally distributed
Requests are processed across our globally distributed infrastructure. Your rate limits are checked close to your users, not in a single region.
Timeout and fallback
Timeout and fallback
Configure custom timeout and fallback behavior for resilience when network issues occur.
Per-identifier overrides
Per-identifier overrides
Give specific users higher limits without changing code. “User X gets 1000/min instead of 100/min.”
Analytics built in
Analytics built in
See which identifiers are hitting limits, when, and how often — in your Unkey dashboard.
Get started
Create a root key
Go to Settings → Root Keys and create a new key with these permissions:
ratelimit.*.create_namespaceratelimit.*.limit
Add to your code
See the framework guides for complete examples with Next.js, Bun, Express, or Hono.

