Skip to main content
Websockets are billed per message. You’re charged only for the messages we actually deliver to your connection. Rates vary by room so you can pick the streams that fit your cost model.

Connection Hold

When you open a new websocket connection, a 1 credit hold is placed immediately. This is charged regardless of how long you stay connected, even if you disconnect before receiving a single message.
Rapidly opening and closing connections will still incur the 1 credit hold on every connect. Keep long-lived connections where possible.

Integer Rounding

Credits are an integer-based unit, so every charge is rounded up to the nearest whole credit. For example, if a billing period accumulates 1.1 credits of websocket usage, you’ll be charged 2 credits. This means very small amounts of usage still cost at least 1 credit. For accurate cost modelling, aggregate messages over longer windows rather than single events.

Per-Room Rates

Each room has its own rate per message delivered:
RoomRoom IDRate per message
Tradespolymarket_trades0.002 credits
Oracle Eventspolymarket_oracle_events0.002 credits
Asset Pricespolymarket_asset_prices0.005 credits
Asset Window Updatespolymarket_asset_window_updates0.025 credits
Market Metricspolymarket_market_metrics0.025 credits
Event Metricspolymarket_event_metrics0.025 credits
Position Metricspolymarket_position_metrics0.025 credits
Trader PnLpolymarket_trader_pnl0.1 credits
Trader Positionspolymarket_trader_positions0.005 credits
Accountspolymarket_accounts0.005 credits
Order Bookpolymarket_order_book0.001 credits
CLOB Rewardspolymarket_clob_rewards0.01 credits
Events Streampolymarket_events_stream0.025 credits
Markets Streampolymarket_markets_stream0.025 credits
Message rates apply to each message actually delivered to your connection, not to every event that occurs upstream. Filters you pass on subscription reduce the number of messages you receive, and therefore your bill.

Example Calculations

A connection subscribed to the Trades room, filtered to 5 condition IDs, receiving an average of 400 messages/hour:
(1 credit hold) + (400 × 0.002) = 1 + 0.8 → rounded up = 2 credits/hour
A single connection to Asset Prices filtered to BTC and ETH, averaging 120 ticks/minute (7,200/hour):
(1 credit hold) + (7,200 × 0.005) = 1 + 36 = 37 credits/hour
A connection to Trader PnL for one wallet that updates ~30 times/hour:
(1 credit hold) + (30 × 0.1) = 1 + 3 = 4 credits/hour

Connection Caps

Each plan has a cap on how many websocket connections you can have open concurrently across your organisation:
PlanConcurrent connections
Free1
Hobby50
Startup250
Scale1,000
EnterpriseUnlimited
If you need more, reach out to us at support@struct.to.

Reducing Costs

  • Use filters. Every room supports filters that narrow down which messages are delivered to your connection. A Trades room with no filters is far more expensive than one filtered to specific condition IDs.
  • Batch by connection, not by subscription. A single connection can subscribe to multiple rooms, so you only pay the 1 credit hold once.
  • Pick the cheapest stream for your use case. If all you need is order book state, the Order Book room at 0.001 credits/msg is substantially cheaper than other streams.
  • Avoid reconnect loops. Every connect incurs the 1 credit hold. Handle temporary network issues with backoff instead of tight reconnect cycles.
Last modified on April 25, 2026