2026-07-19 - Opt-in orderbook sequence and checksum verification
Added PN1, an opt-in integrity protocol for clients that maintain a local copy of the Orderbook Stream. What’s new:- Connect to
wss://ob.polynode.dev/ws?key=YOUR_KEY&integrity=1to receive an ordered anchor for every subscribed token. - Every depth-changing frame carries a token-scoped
prev_seq,seq, and deterministic post-updatechecksum. A client can detect either a missing frame or an incorrectly applied price level immediately. - Send
{"action":"resync","markets":["TOKEN_ID"]}after a sequence or checksum failure. The stream gates that token, sends a replacementbook_snapshotanchor, and confirms completion withsnapshots_doneandreason: "resync". - If an anchor is already being prepared,
resync_in_progressincludesretry_after_ms. If continuity can no longer be guaranteed,integrity_backpressureorintegrity_internal_resetcloses the connection so the client can reconnect with fresh anchors. - PN1 subscriptions use explicit market lists and are initially capped at 500 resolved token IDs per connection.
markets: ["*"]remains available on the normal stream but is not supported withintegrity=1. Existing account limits still apply when lower. last_trade_priceand other non-depth events do not advance the depth sequence or carry a checksum.
integrity is omitted or set to 0. PN1 verifies the continuity and resulting state of PolyNode-delivered depth; it is not a Polymarket sequence number or a cryptographic signature.
Launch verification covered 368 anchors, approximately 12,800 depth updates, 543 trade messages, targeted resync, compressed and uncompressed connections, and both Node.js and Python clients. These are release-validation measurements, not throughput guarantees.
Docs: Orderbook Integrity (PN1), Orderbook Messages, and Orderbook Stream
2026-07-19 - Bounded concurrency for exact wallet P&L
Added a short, explicit concurrency bound toGET /v3/wallets/{address}/pnl so bursts of expensive wallet calculations fail quickly and predictably instead of building a long queue.
Client behavior:
- Each account can have up to two exact wallet P&L requests running at once.
- An additional request waits for capacity for up to 750 milliseconds. If the account’s two requests are still running, it returns
429witherror: "wallet_pnl_busy",scope: "v3_pnl_account_concurrency", andRetry-After: 1. - A separate capacity response can return
503withscope: "v3_pnl_global_concurrency". It uses the samewallet_pnl_busyerror and one-second retry guidance. - This concurrency guard is separate from requests-per-minute limits. Successful responses still include the normal rate-limit headers.
GET /v3/wallets/{address}/pnl/events, leaderboards, batch wallet reads, and trade routes are not part of this guard.
2026-07-18 - V3 pages now have a 1,000-item ceiling
Standardized the largest possible V3 response page at 1,000 rows or buckets. What’s changed:- No V3 endpoint returns more than 1,000 rows or buckets in one page. Requests above an endpoint’s cap are normalized to the cap instead of rejected.
GET /v3/wallets/{address}/pnl/eventsnow defaults tolimit=1000and clamps there, replacing its former 5,000 default and 10,000 maximum.GET /v3/markets/condition/{condition_id}/positionskeeps a 300-row Starter cap; Growth and Enterprise keys can request up to 1,000. The former Enterprise maximum was 2,000.- Stricter endpoint caps remain in place. Most V3 lists still cap at 300 rows, and leaderboards retain their 100-row cap.
- Values through each endpoint’s cap, cursor and offset behavior, filters, sorting, response fields, and row contents are unchanged.
after and before windows are usually more efficient than very large offsets.
Docs: Pagination Limits, Wallet P&L Time Series, and Condition Holders
2026-07-18 - Faster token-scoped wallet trade history
ImprovedGET /v3/wallets/{address}/trades when a request is narrowed to one outcome token.
What’s improved:
- Token-scoped maker, taker, and
role=bothreads now use a faster path while preserving one row per matching wallet role. - Pagination remains stable and non-overlapping, including single-side maker-only and taker-only requests.
- Token, condition, market, event, time, role, amount, grouping, sorting, and ordering filters were checked together to ensure the optimization did not change composition behavior.
- Request parameters, response fields, formulas, caps, and broader multi-market query behavior are unchanged.
2026-07-18 - Faster explicit-window P&L histories
ImprovedGET /v3/wallets/{address}/pnl/events for long explicit after/before windows without changing P&L calculations or response ordering.
Release measurements:
- A heavy full-history control improved from 6.466 seconds to 560 milliseconds.
- A replay of 141 previously slow request shapes completed with HTTP
200throughout: 72 ms median, 1.483 seconds p95, 2.393 seconds p99, and 6.272 seconds maximum. - Responses before and after matched on deterministic fields, values, types, and ordering.
2026-07-17 - Wallet type, deployment, and current status are separate
Identity responses can now distinguish what kind of wallet an address is, whether its contract exists on Polygon, and whether it is the account’s currently selected trading wallet. What’s new:wallet_typereportsdeposit_wallet,safe, orproxywhen known.deployedreports whether the wallet contract currently exists on Polygon.currentreports whether the address is the account’s selected trading wallet.- The fields are additive on
GET /v3/identities/{address},POST /v3/identities/batch,GET /v3/identities/search, and identity-enriched credits responses. GET /v1/resolve/{query}now includeswallet_details, which lists the current address and the account’s other deployed wallets withwallet_type,deployed, andcurrenton each item.
wallets object remains deployed-only for compatibility. This means a current deposit-wallet address can appear in wallet_details with deployed: false and current: true while its wallets.deposit_wallet value is still null. Legacy identities can return null where a status is genuinely unknown.
No existing resolver or identity field was renamed or removed.
Docs: Resolve Wallet, Identity Lookup, Batch Resolve, and Username Search
2026-07-17 - V3 account-level rate limits
V3 REST limits now apply once per account, not once per API key. What’s new:- All API keys owned by the same account share the plan’s rolling standard V3 REST allowance.
- Keys can be used at the same time, but creating more keys does not increase the account’s throughput.
- Heavy trade-history endpoints keep their separate allowance, which is also shared across the account’s keys.
2026-07-15 - Lower settlement, status, and confirmed-trade latency
Corrected two independent delivery stalls affecting the public event WebSocket. What’s improved:- Settlement frames no longer accumulate behind periodic connection bookkeeping and then arrive in a burst. In a 210-second public check covering 3,743 settlements, measured delivery was 1 ms median, 3 ms p90, 15 ms p99, and 214 ms maximum.
- Confirmed
status_updateandtradedelivery recovered from a post-restart regression whose p90 had risen to approximately 23.7 seconds. Later windows measured status p90 at 530-842 ms and trade p90 at 491-1,066 ms. - Pending settlement notifications continue to lead confirmed status delivery. Follow-up windows measured a 2.9-3.3 second p90 lead.
- A 180-second public soak delivered 4,336 settlements and 4,317 status updates across 121 blocks with no socket or parsing errors; embedded confirmation latency measured 3.096 seconds p95 and 3.794 seconds maximum.
- A paired validation matched 257 of 257 observed pending transactions to their confirmed updates, with arrival latency of 3.003 seconds p95 and 3.221 seconds p99.
2026-07-14 - Clearer checkout returns and support feedback
Improved two customer-facing website flows. What’s changed:- After a successful card checkout returns to the dashboard, the page now refreshes account status for up to 30 seconds until the selected paid plan is visible. This avoids briefly showing the old plan while activation finishes.
- The support widget now shows an on-page acknowledgement only after a message is accepted. The acknowledgement disappears when a real support reply arrives; signed-in users are also told that a reply can follow by email while they are away.
- New USDC checkout buttons and sign-in handoffs were temporarily removed from the website. Previously stored USDC handoffs are cleared so an old browser session cannot reopen that purchase flow.
- Existing USDC-paid access and its displayed expiration date are unchanged. Card checkout remains available.
2026-07-14 - Faster recent wallet-position pages
ImprovedGET /v3/wallets/{address}/positions performance for recent, not-yet-redeemed positions, especially on wallets with long histories.
One previously slow release sample improved from approximately 194 ms to 24.3 ms. Public position samples remained successful, and a combined positions/trades enrichment check passed without response differences.
The endpoint’s 300-row page cap, lifecycle filters, fields, values, and pagination contract are unchanged.
Docs: Wallet Positions
2026-07-13 - V3 service incident resolved
Some core V3 data requests returned503 responses beginning at approximately 22:20 UTC, with the main service interruption lasting from approximately 23:00 to 23:51 UTC.
Service was restored during the same window. Post-recovery checks returned 200 across the affected surfaces, including approximately 100 ms for a representative trades request and 36 ms for a representative positions request. Normal live-data processing also resumed.
No client request, endpoint, or response-format change was required after recovery.
