Skip to content

API Rate Limits

To ensure platform stability and prevent abuse, Headless Domains enforces rate limits on certain API endpoints.

Current Rate Limits in Production

Current Rate Limits

Endpoint Limit Bucket key Env var to override
/agent/auth, /agent-auth, /api/v1/agents/provision 10 per hour per IP RATELIMIT_PROVISION_AGENT
/api/v1/lookup/<domain> 60 per minute per IP RATELIMIT_LOOKUP
/lookup (alias) 60 per minute per IP same as above
/search 60 per minute per IP RATELIMIT_SEARCH
/api/v1/integrations/shakeshift/slds 30 per minute per IP RATELIMIT_SHAKESHIFT
/api/v1/integrations/shakeshift/pricing 30 per minute per IP RATELIMIT_SHAKESHIFT
/api/health exempt (no limit) - -
Everything else unlimited - -

All anonymous provisioning aliases share one quota; switching URLs does not start a new bucket. Client addresses come from request.remote_addr unless the immediate peer belongs to the reviewed private/shared-address or Cloudflare proxy networks. Trusted X-Forwarded-For chains are evaluated right-to-left, and CF-Connecting-IP is never trusted directly. Deployments may replace the reviewed defaults with RATELIMIT_TRUSTED_PROXY_CIDRS, a comma-separated CIDR list, when their proxy topology changes.

Are these limits reasonable?

Yes, these are highly sensible production rate limits! Here is why:

  • Agent Provisioning (10/hour): Creating a new identity is a one-time setup action. The shared per-IP limit covers the canonical route and both compatibility aliases.
  • Lookups & Search (60/min): 1 request per second per IP is generous for individual users or agents checking availability. It successfully prevents aggressive scrapers from harvesting your entire namespace.
  • Shakeshift Sync (30/min): Partner integrations typically sync every few minutes, so 30 per minute provides plenty of headroom while protecting backend database performance.