Skip to content

Rate Limits & Errors

Cerebrus Pulse enforces rate limits across multiple dimensions to ensure fair access.

DimensionLimitWindow
Per IP12 requests1 minute
Per wallet20 requests1 minute
Concurrent3 requestsSimultaneous
Daily1,000 requests24 hours
  • IP-based: Tracked by your client’s source IP address
  • Wallet-based: Tracked by the x-x402-payer header (your wallet address)
  • Concurrent: Maximum simultaneous requests being processed
  • Daily: Rolling 24-hour window

When a limit is exceeded, you receive:

HTTP/1.1 429 Too Many Requests
Content-Type: application/json
{
"detail": "Rate limit exceeded (per-IP)",
"limit": 12,
"window": 60
}

GET /health and GET /coins are not rate limited.

StatusMeaningWhen It Happens
400Bad RequestInvalid coin ticker, invalid timeframe, or insufficient candle data for the requested coin
402Payment RequiredStandard x402 flow — your client needs to sign a USDC payment. The x402 SDK handles this automatically.
429Too Many RequestsRate limit exceeded. See limits above.
500Internal Server ErrorUnexpected engine failure. The analysis engine encountered an error.
503Service UnavailableGateway is in maintenance mode (kill switch disabled). Includes retry_after: 3600.
504Gateway TimeoutThe analysis engine took longer than 15 seconds. Try again.

All errors return JSON:

{
"detail": "Human-readable error message"
}
{"detail": "Invalid coin: NOTACOIN"}
{"detail": "Insufficient data for NEWCOIN on timeframe 4h"}
{
"detail": "Service temporarily unavailable",
"retry_after": 3600
}
  1. Check /health first — Before batch operations, verify the gateway is operational and the kill switch is enabled.
  2. Use backoff on 429 — Wait the indicated window duration before retrying.
  3. Don’t retry on 400 — These are client errors. Fix the request before retrying.
  4. Retry on 504 — Engine timeouts are usually transient. A single retry typically succeeds.
  5. Respect 503 — The gateway is in maintenance. Wait for the retry_after period.
  6. Use /bundle for multi-data — Instead of calling /pulse + /sentiment + /funding separately (3 requests), use /bundle (1 request). Cheaper and uses fewer rate limit slots.