Total Human DesignDashboard|
Documentation

Rate Limits

All API requests are rate-limited based on your subscription plan. Limits are applied per API key.

Plan limits

ProductPlanRequests per MinuteMonthly Quota
Advanced ChartMonthly120 RPM100,000 units
Advanced Chart3-Month120 RPM150,000 units
Advanced ChartAnnual120 RPM300,000 units
Advanced ChartLifetime120 RPM150,000 units
SAGE APIMonthly100 RPM100,000 units
SAGE API3-Month100 RPM150,000 units
SAGE APIAnnual100 RPM300,000 units
SAGE APILifetime100 RPM150,000 units

Advanced Chart and SAGE API are separate plans with separate keys. Rate limits and unit consumption are tracked independently per key.

What counts as a unit?

Most endpoints consume 1 unit per request. Transit endpoints and SAGE queries consume more:

Endpoint TypeUnit Cost
Chart endpoints (/api/chart, /api/composite, /api/astrology)1 unit
Multi-chart batch (/api/multi-chart)1 unit per chart in batch
Planetary returns (/api/returns)1 unit per request
Transit endpoints (daily granularity)1 unit per day in range
Transit endpoints (hourly granularity)24 units per day in range
Transit endpoints (minute granularity)1,440 units per day in range
Transit periods (/api/transits/periods)1 unit per request
Retrograde periods (/api/retrogrades)1 unit per request
SAGE query (/api/sage)5 units per query
MCP tool calls (/mcp)Same as equivalent REST endpoint

Failed requests (4xx/5xx responses) are not counted against your quota.

Rate limit headers

Every API response includes rate limit headers:

HeaderDescription
X-RateLimit-LimitMaximum requests allowed per minute
X-RateLimit-RemainingRequests remaining in the current window
X-RateLimit-ResetUnix timestamp when the rate limit window resets
X-Monthly-Units-UsedUnits consumed this billing period
X-Monthly-Units-LimitTotal units available this billing period

Exceeding limits

When you exceed the rate limit, you'll receive a 429 Too Many Requests response:

{ "success": false, "error": "Rate limit exceeded. Try again in 60 seconds." }

When your monthly quota is exhausted:

{ "success": false, "error": "Monthly usage limit reached. Upgrade your plan or wait for the next billing period." }