Skip to main content
Nexus enforces a monthly request quota and a per-second rate limit on every API key. Both depend on your plan.

Limits by plan

Burst is the token-bucket depth: the maximum number of requests you can fire in an instant before the per-second rate limit throttles you.

Without an active subscription

Requests authenticated against an expired, cancelled, or suspended subscription, and any request that can’t be tied to an active plan, are degraded to a restrictive floor:

Rate limit headers

Metered responses carry three headers describing your monthly quota:
These headers describe the monthly quota only. The per-second rate limit is not reported in headers - on a per-second 429, read Retry-After instead (see below).
Scope and absence:
  • The headers appear on metered REST responses - the blockchain data endpoints that count against your quota. Dashboard and account-management endpoints (auth, billing, /api/user, /api/keys) are not metered and don’t carry them.
  • They are not sent for MCP traffic (/mcp/** reports quota errors inside the JSON-RPC envelope) or on WebSocket streams.
  • Plans with an unlimited request allowance (Enterprise arrangements without a monthly cap) get no X-RateLimit-* headers at all. Absence is not an error - it just means no monthly cap applies.

When you hit a limit

Nexus returns HTTP 429 with a JSON body. There are two cases, and you can tell them apart by their headers: Monthly quota exhausted - the response carries the X-RateLimit-* headers (X-RateLimit-Remaining: 0), a Retry-After header with the seconds until your quota refills, and reset_at in the body (the same instant as X-RateLimit-Reset, as an ISO timestamp):
Per-second rate exceeded - no X-RateLimit-* headers, just Retry-After: 1. Slow down and retry shortly:
Branch on header presence: a 429 with X-RateLimit-Reset (or reset_at in the body) means your monthly quota is exhausted until the reset - don’t retry in a loop. A 429 with only Retry-After: 1 means you’re sending too fast right now.
Counters reset at 00:00 UTC on the 1st of each month. The reset job runs at - or moments after - that instant, so a request fired exactly at the boundary can still see one final 429. Tolerate a single extra retry right at reset time rather than treating it as an error.

Add-on gating (402)

Endpoints behind a paid add-on (Market Data, Wallet Analytics, Transaction Builder) return HTTP 402 when the add-on isn’t active on your plan:
An account with no active subscription at all gets a 402 with a different error and no addon:

Handling 429s

Read Retry-After first - both 429 variants send it:

Best practices

Cache frequently accessed, slow-changing data (block / tx / asset metadata) to cut request volume against your monthly quota.
Keep sustained throughput under your tier’s per-second limit; the burst bucket absorbs short spikes, not steady overload.
Watch X-RateLimit-Remaining on your responses so you can adjust before hitting the monthly cap.

Upgrading

Need higher limits? Contact nexus@gerowallet.io.

Next steps

Error Handling

How Nexus reports API errors

Pagination

Working with paginated responses