Skip to content

Rate Limits

TL;DR

Athena gates request volume through three independent layers:

  1. Pre-auth IP shield — hardcoded 20 req/60s per IP on /auth/*. Stops credential-stuffing.
  2. Configurable rate limits — workspace admins author rules scoped to Agent, Customer, API Key, or Workspace. Enforced on every authenticated request.
  3. System guards — workflow timeout, recursion cap, budget, webhook concurrency, push-notification dedup. Hardcoded constants in the engine.

When a limit fires, the API returns 429 Too Many Requests with RFC 9239 headers plus Retry-After.

Scopes

Rules are evaluated from most-specific to least-specific:

ScopeWhat it limits
AgentCalls to one specific agent
Customer:productCustomers holding a specific subscription product
Customer:paidAny paid customer
Customer:freeAny customer without an active subscription
Customer:*All customers regardless of tier
User (API key)One API key (wak_ or eak_)
WorkspaceTotal workspace traffic

Time Windows

Second, Minute, Hour, Day, Week, Month, BillingCycle.

Limit Types

  • Requests — count of API calls
  • Tokens — LLM tokens (prompt + completion combined)
  • Cost — accumulated cost in microdollars (1 USD = 1,000,000 microdollars)

429 Response

HTTP/1.1 429 Too Many Requests
Retry-After: 42
RateLimit-Limit: 100
RateLimit-Remaining: 0
RateLimit-Reset: 42
RateLimit-Policy: 100;w=60;scope=workspace
RateLimit-Scope: workspace:requests
{
"error": {
"code": "rate_limit_requests_exceeded",
"message": "Request limit exceeded. Try again in 42 seconds.",
"details": {
"limit": 100,
"current": 100,
"reset_in_seconds": 42,
"window": "minute",
"scope": "workspace"
}
}
}

Error Codes

CodeMeaning
rate_limit_requests_exceededRequest count limit hit
rate_limit_tokens_exceededToken usage limit hit
rate_limit_cost_exceededCost budget limit hit
rate_limit_anonymous_abusePre-auth IP shield triggered

What to Do When Rate Limited

  1. Read Retry-After from the response header. Wait that many seconds before retrying.
  2. Implement exponential backoff for repeated 429s.
  3. For token/cost limits, use POST /agents/{id}/preview-credits to estimate cost before executing.
  4. Contact your workspace admin to adjust limits if your use case legitimately exceeds the defaults.

System Guards (Non-Configurable)

These limits are hardcoded and cannot be changed via the API:

GuardLimit
Pre-auth IP20 req / 60s
Login throttle (per email)5 / 15 min
Token exchange (per IP)10 / min, 50 / hr
WebSocket connections (global)100
Conversation turn lock1 in-flight per conversation
Request body size2 MiB
Workflow timeout300s default
Workflow recursion25 node visits
Workflow output50 MB
HTTP tool timeout30s default, 60s max
Webhook delivery concurrency20 in-flight
Push notifications (per customer)10 / hr + 60s dedup