Skip to content

Rate Limiting

Pulsar uses per-route rate limiting with intelligent identification.

Limits

RouterLimitDescription
Auth10/minLogin, register, profile
Market120/minStock quotes, bars, heatmap, movers, news
Crypto120/minCrypto quotes, bars, symbols
Doviz120/minCurrency quotes, symbols
Financials30/minCompany data (proxies Finnhub)
Portfolio60/minHoldings CRUD
Watchlist60/minWatchlist CRUD
Terminal60/minWidget layout save/load
Heatmap60/minCustom heatmap CRUD
Health300/minHealth check endpoint

Identification

The rate limiter identifies clients by:

ScenarioKey Format
Authenticateduser:{jwt_sub}:{path}
Anonymousip:{client_ip}:{path}

When a valid JWT is present in the Authorization header, the user's ID from the token sub claim is used. This ensures:

  • Each user has independent rate limits regardless of IP
  • Multiple users behind the same NAT don't share limits
  • IP-hopping doesn't reset a user's rate limit

Response

When rate limit is exceeded:

HTTP 429 Too Many Requests

Released under the MIT License.