Two independent controls: the per-minute, per-second, connection, and Free-session limits on this page remain in force. Polynode now also shows monthly API-request and WebSocket-transfer usage in the usage dashboard, but monthly usage enforcement is not active yet.
Tier limits
Firehose = a WebSocket subscription with no filters applied. It receives every event (all settlements, trades, blocks, etc.) at full throughput. Filtered subscriptions — where you specify wallets, tokens, slugs, or size thresholds — use far less bandwidth and don’t count toward your firehose limit.
Snapshot size vs snapshot lookback — these are two separate snapshot modes controlled by different parameters.
snapshot_count returns the last N events (capped by your tier). since returns all events after a UNIX-ms timestamp within your tier’s lookback window. If you pass both, since takes priority and snapshot_count is ignored. See subscribing for details.Enterprise includes dedicated server infrastructure. Contact josh@quantish.live before activation.
V3 REST data endpoints require a paid plan. Heavy trade-history endpoints have a separate shared account bucket in addition to your standard V3 REST data limit. See V3 REST data limits below.
How it works
- V3 REST limits are tracked per account using a sliding window. You can use multiple keys at the same time, but every request draws from the same account allowance.
- V3 REST data endpoints require a paid API key. Free-tier keys receive
402 Payment Required. - Heavy V3 trade-history endpoints check both your account’s standard V3 REST data limit and its heavy endpoint bucket. The stricter remaining limit applies.
- When you exceed the limit, you’ll receive a
429 Too Many Requestsresponse. - The error message includes a Unix timestamp for when you can retry.
- Successful REST responses include
x-ratelimit-limit,x-ratelimit-remaining, andx-ratelimit-resetheaders.
Monthly usage allowances
Monthly usage is account-level and separate from the instantaneous limits above. Every active API key owned by the same account contributes to the same totals. Creating another key, reconnecting a WebSocket, or rotating a key does not create another allowance or reset usage. The usage dashboard shows three meters:
Plan allowances reset at the beginning of the account’s next service period. The dashboard shows the exact start and end dates. Transfer uses decimal units:
1 GB = 1,000,000,000 bytes and 1 TB = 1,000 GB.
Enterprise/Institutional usage is still measured and visible in the dashboard,
but it has no monthly API-request or WebSocket-transfer ceiling. The
instantaneous request and connection limits in the tier table remain separate.
Monthly usage enforcement is not active yet. The dashboard and package purchases are live so you can observe real usage and prepare before monthly limits are enabled. Existing per-minute, per-second, connection, and Free-session limits still apply.
What transferred means
WebSocket transfer is the encoded application payload successfully submitted to your connection. Text messages count their UTF-8 payload length, while compressed binary messages count the smaller compressed payload length. The same payload delivered to two connections counts twice. Failed sends, acknowledgements, heartbeats, ping/pong frames, warnings, quota notices, close frames, WebSocket framing, TLS, TCP, IP, and retransmission overhead do not count. This is data transfer, not storage or a bandwidth-speed measurement. The dashboard may show API response transfer for transparency. It is informational and does not consume a version-one package or allowance.How capacity is consumed
For each meter, Polynode consumes the allowance included with your plan first, then active purchased packages, then active courtesy capacity. Packages and courtesy grants with the earliest expiration are used first. Included capacity and added packages remain visually separate in the dashboard.Usage packages
Signed-in Free and paid accounts can use a package to add capacity to one meter without changing the subscription plan:A package adds only monthly capacity for its selected meter. It does not unlock paid-only endpoints or change per-minute, connection, or Free-session limits.
Best practices
Use WebSocket for real-time data
Instead of polling REST endpoints, connect via WebSocket for live updates:Cache metadata locally
Market metadata (question, slug, outcomes) changes infrequently. Cache it and only refresh periodically:Batch where possible
UsePOST /v3/wallets/batch instead of many individual wallet summary requests when you need P&L for multiple wallets.
Use filtered subscriptions
WebSocket subscriptions with filters reduce message volume and processing overhead:Expected WebSocket throughput
WebSocket subscriptions are not rate-limited by requests/min, but message volume varies significantly by subscription type:V3 REST data limits
Standard V3 REST reads count against your plan’s V3 REST data limit.
Heavy V3 trade endpoints have a separate shared account bucket because trade-history scans are the highest-throughput REST surface:
/v3/trades/v3/wallets/{address}/trades/v3/wallets/{address}/combos/trades/v3/markets/{token_id}/trades/v3/markets/slug/{slug}/trades/v3/builders/{code}/trades
429 response with:
Pagination limits
Most V3 list endpoints default tolimit=100 and clamp limit to a maximum of 300 rows per page. If you request more than the page cap, Polynode normalizes limit to the maximum allowed value. Responses include the actual limit, offset, rows_returned, and has_more values.
No V3 endpoint returns more than 1000 rows or buckets in one page. Cursors and offsets select where the next page starts; they do not increase its size.
/v3/markets/condition/{condition_id}/positions supports tiered page sizes for holder lists: Starter keys can request up to 300 rows, while Growth and Enterprise keys can request up to 1000.
/v3/wallets/{address}/pnl/events defaults to and clamps at limit=1000 buckets.
For deep trade-history walks, prefer after and before time windows instead of very large offsets.

