├ 13
rate limits
Two limits gate POST /v1/send: a per-app burst rate limit and (on the hosted tier) a monthly event quota. Rate-limited requests do NOT consume quota.
Per-app rate limit
Token-bucket via a Durable Object, scoped to each app. Default: 1000 events/minute burst capacity. When exceeded:
HTTP 429
{
"error": "rate_limited",
"retry_after_ms": 1200
}Wait retry_after_ms and resend. The limit is configurable per app via PUT /api/dashboard/apps/:id/rate-limit (10 to 100,000 events/min, or null to reset to default). Self-hosters can also change the server-wide default in apps/api/src/rate-limiter.ts.
Monthly event quota (hosted tier only)
Free: 10,000 events/month. Pro: 50,000 events/month. Self-host: unlimited.
HTTP 429
{
"error": "quota_exceeded",
"plan": "free",
"limit": 10000,
"used": 10000,
"year_month": "2026-04",
"detail": "monthly send limit..."
}
Headers:
x-ratelimit-limit: 10000
x-ratelimit-used: 10000
x-ratelimit-scope: monthlyThe counter resets on the first day of each calendar month. Upgrade to Pro on /pricing to raise the cap.