Free
Side projects and testing.
$0
per month, billed monthly
- 100,000 requests / month
- 1 policy, 1 environment
- 7 days of decision logs
- Community support
Product
Three capabilities do most of the work: precise limits, honest visibility, and the ability to change your mind instantly when a real customer gets caught.
01 - Limits
Define a policy per plan tier, per endpoint, or per individual API key. Burst allowances let a client spend ahead briefly and repay it, which is how real traffic behaves - batch jobs are bursty, and blocking them is not protection, it is an outage you caused.
RateLimit-* response headers out of the box
02 - Visibility
Every decision is logged with the key, endpoint, region and the rule that matched. Filter to rejected requests and you have the abuse report already written. Export to your own warehouse if you would rather query it yourself.
03 - Control
Use the DNS proxy for zero code changes, or the middleware package if you want limits evaluated inside your own process. Same policy file either way.
// Express middleware
import { throttlebox } from "@throttlebox/express";
app.use(throttlebox({
key: "api_key",
policy: "public-api"
}));
# FastAPI middleware
from throttlebox import ThrottleBox
app.add_middleware(
ThrottleBox,
key="api_key",
policy="public-api",
)
// net/http handler
tb := throttlebox.New(throttlebox.Config{
Key: "api_key",
Policy: "public-api",
})
http.Handle("/v1/", tb.Wrap(apiHandler))
Pricing
Side projects and testing.
$0
per month, billed monthly
Growing APIs with paying customers.
$29
per month, billed monthly
High volume and compliance needs.
Custom
talk to us
| Feature | Free | Pro | Enterprise |
|---|---|---|---|
| Monthly requests | 100K | 10M | Unlimited |
| Policies | 1 | Unlimited | Unlimited |
| Log retention | 7 days | 90 days | Custom |
| Anomaly alerts | - | Included | Included |
| Self-hosted option | - | - | Included |
| Support | Community | Email, 1 day | Shared Slack, SLA |