Streaming Overview
Real-time WebSocket access to Solana, Ethereum and Polygon data — pub/sub subscriptions, a high-throughput Solana stream, and a custom account watchlist push, all over a single
wss://gateway.
| Method / Endpoint | wss://ws.triport.io/ws/* (5 channels — see table below) |
| Network | Solana, Ethereum, Polygon |
| Authentication | Authorization: Bearer $TRIPORT_API_KEY (upgrade header or first WS frame) or ?api-key= query param |
| Required scope | — (tier-gated per channel/method) |
| Tier / rate limit | Per-channel tier floor (see table); rate limiting is RPS-per-tier with burst — there is no daily quota |
Description
Triport exposes its real-time surface over WebSocket. All streaming
connects to the single production gateway host ws.triport.io over
wss://; a ws.staging.triport.io host is available for testing. Each
channel is a distinct path on that host.
There are five channels. Three speak the standard JSON-RPC pub/sub shape
(*Subscribe → ack with a subscription id → server-pushed notifications):
the Solana pub/sub channel (/ws/sol), the Ethereum
channel (/ws/eth) and the Polygon channel
(/ws/polygon, which mirrors the Ethereum subscription
types). The Solana high-throughput stream
(/ws/sol-stream) is a bidirectional filter-and-push
stream that uses the provider JSON protocol — a JSON-encoded variant of
the upstream geyser stream framing, where the client sends a full
SubscribeRequest filter set (each request atomically replaces the previous
one) and the server pushes SubscribeUpdate frames. Finally, the custom
watchlist push channel (/ws/sol-watch) delivers
event-driven account-change notifications for pubkeys you registered through
the REST control plane.
Per-method and per-channel access is gated by your plan tier. Subscribing to
a method above your tier does not silently fail — the server sends a
forbidden error frame and closes the connection with code 4003, carrying
the current_tier / required_tier so your client can prompt for an
upgrade.
Authentication
Every channel accepts the same two auth forms. Bearer is preferred.
1. Bearer token (preferred). Send it on the WebSocket upgrade request:
wscat -c wss://ws.triport.io/ws/sol \
-H "Authorization: Bearer $TRIPORT_API_KEY"If your client cannot set headers on the upgrade, send the token as the first WS frame instead:
{ "jsonrpc": "2.0", "method": "auth", "params": ["$TRIPORT_API_KEY"] }2. API key query param. Append ?api-key= to the channel URL:
wscat -c "wss://ws.triport.io/ws/eth?api-key=$TRIPORT_API_KEY"A connection that authenticates with neither (or an invalid token) is closed
with code 4001.
Close codes
All channels share one set of WebSocket close codes. The numeric code travels
on the RFC-6455 close frame itself; the server usually sends a JSON
WSErrorFrame immediately before closing so SDKs can classify the failure.
| Close code | error | Meaning |
|---|---|---|
4001 | unauthorized | Missing or invalid credentials on connect. |
4003 | forbidden | Tier insufficient for the requested method, or method unknown. Frame carries current_tier, required_tier, method, and an upgrade_url. |
4029 | rate_limited | Per-tier RPS limit exceeded. Frame carries retry_after_sec and limit_rps. |
4030 | trial_expired | Trial / quota window for the plan has ended. Frame carries an upgrade_url. |
The error frame mirrors the HTTP error envelope, so the same SDK error classes apply. See Errors for the full envelope and field reference.
Channels
| Channel | Endpoint | Network | Tier floor | Detail |
|---|---|---|---|---|
| Solana JSON-RPC Pub/Sub | /ws/sol | Solana | free (per-method: free → pro) | sol-pubsub |
| Solana high-throughput stream | /ws/sol-stream | Solana | pro | sol-stream |
| Ethereum Pub/Sub | /ws/eth | Ethereum | free (per-method: free → pro) | eth-ws |
| Polygon Pub/Sub | /ws/polygon | Polygon | free (per-method: free → pro) | poly-ws |
| Watchlist push (custom) | /ws/sol-watch | Solana | business | watchlist-push |
Per-method tiers (Solana / Ethereum / Polygon pub/sub). The connection
opens on free, but individual subscriptions unlock at higher tiers:
- Solana (
/ws/sol):accountSubscribe,signatureSubscribe→ free;logsSubscribe,programSubscribe,slotSubscribe,rootSubscribe→ basic;blockSubscribe,voteSubscribe,slotsUpdatesSubscribe→ pro. - Ethereum (
/ws/eth) and Polygon (/ws/polygon):newPendingTransactions→ free;logs→ basic;newHeads,syncing→ pro.
Solana stream concurrency. /ws/sol-stream is gated by the number of
concurrent streams rather than RPS: up to 8 on pro and 20 on
business. The watchlist channel allows up to 10,000 watched pubkeys on
business.
Notes
- Provider protocol on
/ws/sol-stream. Unlike the JSON-RPC pub/sub channels, the Solana stream carries the provider JSON protocol: a single bidirectional connection where eachSubscribeRequestreplaces the entire active filter set atomically, and the server emitsSubscribeUpdateframes whose populated key (account,slot,transaction,block, …) tells you the update kind. See sol-stream for the filter and update schemas. - Watchlist requires REST registration. Before connecting to
/ws/sol-watch, register pubkeys via the REST control plane (POST /v1/sol/watchlistwithcallback_type: ws). The channel only streams entries owned by the authenticated tenant. - Keepalives. The Solana stream uses
Ping/Pongframes; the watchlist channel emits a heartbeat every 30s when idle. - See Authentication and Rate limits & tiers for account-wide details.