Streaming Overview
Real-time access to Solana, Ethereum and Polygon data — native Solana Yellowstone gRPC, WebSocket pub/sub subscriptions, a high-throughput Solana WebSocket bridge, and custom account watchlist push.
| Method / Endpoint | gRPC triport.io:443 and wss://triport.io/ws/* |
| Network | Solana, Ethereum, Polygon |
| Authentication | gRPC metadata x-token: $TRIPORT_API_KEY; WebSocket Authorization: Bearer $TRIPORT_API_KEY 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 two real-time Solana surfaces:
- Native Yellowstone gRPC / LaserStream for backend services that use the
geyser.Geyserprotobuf API directly. - WebSocket channels for JSON-RPC pub/sub, browser-compatible high-throughput streams, and watchlist push notifications.
There are six WebSocket 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://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://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 Yellowstone gRPC / LaserStream | triport.io:443 | Solana | pro | sol-grpc |
| 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 |
| Solana first-shred stream | /ws/sol-firstshred | Solana | business | sol-firstshred |
| Solana pre-execution transaction stream | /ws/sol-preexec | Solana | pro | sol-preexec |
| 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.
Pre-execution stream limits. /ws/sol-preexec is capped on three axes
rather than RPS, because its cost is bandwidth rather than request count:
2 concurrent streams on pro and 4 on business; an account filter of at
most 50 entries on pro and 200 on business; and the filter is
mandatory on pro — unfiltered the channel is roughly 21.75 Mbit/s
sustained, which is more bandwidth per subscriber than the plan costs.
Business may connect unfiltered.
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. - Yellowstone source & semantics (
/ws/sol-stream). The Solana stream bridges the Yellowstone Geyser gRPC interface (geyser.Geyser, proto 13.1.0) from Triport-operated cohort hosts with managed failover. It is a live, at-most-once firehose — no replay/backfill, reconnect-and-resubscribe on drop. Full proto/source/latency/failover table in sol-stream → Source, proto & delivery semantics. - 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.