Concepts
Rate limits
hypersnap-docs-web/src/concepts/rate-limits.mdLast synced: May 20, 2026Rate limits #
Hypersnap is designed to be run by node operators for their own apps, not as a centralized API vendor, so the server-side rate-limiting story is modest. Here's the full picture:
Public reads #
There is no built-in per-IP rate limit on the public read endpoints. Your operator may run a reverse proxy (nginx, Cloudflare, envoy, etc.) in front of the node with its own rate limiting — check their operations docs.
In practice the node will happily serve tens of thousands of requests per second off RocksDB as long as disk/CPU hold up. Be a good citizen: cache heavy responses (feeds, search), obey your operator's posted limits, back off on 5xx.
Webhook deliveries (outbound) #
Each webhook has a per-webhook rate limit enforced by the dispatcher:
- Default: 1000 events per 60 seconds, per webhook.
- Configured at node level via
default_rate_limit/default_rate_limit_duration_secs. - Events above the limit are dropped (counted in the
webhooks.delivery.rate_limitedmetric), not queued.
If you expect high-volume event streams, either bump the rate limit with your operator or narrow your subscription filters so fewer events match.
Mini-app notification send #
The send endpoint has three applicable limits:
- Per-app dedupe window.
(fid, notificationId)is deduped for 24 hours by default. Sending the same notification twice within that window is a no-op for the recipient. This follows the Farcaster Mini App spec exactly. - Per-token client limits. The Farcaster client (Warpcast, etc.) enforces the spec-defined
1 notification per 30 secondsand100 per dayceilings. Tokens that exceed those limits come back inrate_limited_tokensfrom the client, and Hypersnap returns the correspondingfidsinretryable_fidsso your code can retry later. - Per-app token cap. No hard limit — the registered token store is bounded by however many Farcaster users have added your mini app.
Per-FID management caps #
When signing management requests:
- Webhooks:
max_webhooks_per_owner(default 25). Creating a 26th returns429 Too Many Requests. - Mini apps:
max_apps_per_owner(default 25). Same behavior.
Both caps are operator-configurable.
Summary #
| Surface | Limit | Enforced where |
|---|---|---|
| Public reads | None by default | Your operator's reverse proxy |
| Webhook delivery | 1000 events / 60 sec (default) | Hypersnap dispatcher |
| Send → client batch | 100 tokens per POST | Hypersnap sender (spec-mandated) |
| Send → per token | 1 / 30 sec, 100 / day | Farcaster client (spec-mandated), surfaced as retryable_fids |
| Send → dedupe | (fid, notificationId) for 24h |
Hypersnap (spec-mandated) |
| Webhooks per FID | 25 (default) | Hypersnap store |
| Mini apps per FID | 25 (default) | Hypersnap store |
Mirrored from hypersnap-docs-web. Edit the source to update this page.
Edit on GitHub