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. The limits below apply identically to the Blockfrost-compatible surface (/api/v0). It is the same key on the same plan, so its traffic counts against the same monthly quota and the same per-second limit as native traffic. There is no separate compatibility allowance.

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.
Starter covers the core API only. Add-ons, bundles and WebSocket packages are available on Builder, Growth and Scale, and Enterprise includes all of them. REST add-ons draw on the same monthly quota as the core API.

Without an active subscription

Nexus has no free tier. Requests authenticated against an expired, cancelled-and-lapsed, or suspended subscription, and any request that can’t be tied to an active plan, are refused with HTTP 402 subscription_required (see Add-on gating).

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.
On /api/v0 the 429 body is Blockfrost’s, not the shape above. The limits are the same; only the envelope differs. It uses Blockfrost’s status_code / error / message fields, with error set to Project Over Limit, and it still sends Retry-After, so a Blockfrost SDK’s built-in backoff works unchanged. See Blockfrost compatibility.
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, IPFS) return HTTP 402 when the add-on isn’t active on your plan, either on its own or through a bundle that covers it:
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