Solana First-Shred Stream
The earliest slot-level signal Triport exposes — a compact WebSocket fan-out of Solana's
first-shred-receivedslot event, pushed the moment a validator receives the first shred of a new slot, ahead ofprocessed/confirmed.
| Method / Endpoint | WS /ws/sol-firstshred |
| Type | Triport product (WebSocket) |
| Network | Solana |
| Authentication | Authorization: Bearer $TRIPORT_API_KEY (or ?api-key= query param) |
| Required scope | sol.first-shred on the API key (* wildcard keys also work) |
| Tier / rate limit | Business tier and above; concurrent-stream capped (no daily quota) |
What This Is
/ws/sol-firstshred streams the SLOT_FIRST_SHRED_RECEIVED slot status —
the earliest per-slot signal a Solana validator emits. It fires when a validator
receives the first shred of a slot, i.e. as the block starts forming, before
the slot reaches processed or confirmed commitment. Use it as a low-latency
"new slot is being produced" trigger for snipers, liquidators, copy-traders, and
latency-sensitive schedulers that want to react at the leading edge of block
production.
Triport holds a single upstream geyser.Geyser/Subscribe (slots filter with
interslot_updates) to its Solana Yellowstone cohort and fans the decoded
first-shred events out to every connected client, so you pay one lightweight WS
connection instead of running your own geyser client.
What this is not. This is a slot-level signal ("the first shred of slot N arrived at the validator"). It is not raw shred packets and not a transaction-level pre-confirmation — a first-shred event says a slot is forming, not that any specific transaction has landed or will land. Always confirm transactions through a standard commitment check.
If you want the transactions of that forming slot rather than the fact that it started, that is a different channel: the Solana pre-execution transaction stream delivers transactions reassembled from the leader's shreds before they execute (Pro tier). It carries no execution metadata either, but it is transaction-level.
For the full geyser stream (accounts, transactions, blocks, all slot statuses) see Solana Yellowstone gRPC and the Solana high-throughput stream.
Endpoint
wss://triport.io/ws/sol-firstshredAuthentication
Bearer is preferred; the API-key query param is the fallback for clients that cannot set headers on the upgrade.
wscat -c wss://triport.io/ws/sol-firstshred \
-H "Authorization: Bearer $TRIPORT_API_KEY"
# or
wscat -c "wss://triport.io/ws/sol-firstshred?api-key=$TRIPORT_API_KEY"A connection with missing/invalid credentials is closed with 4001; a key below
the Business tier is closed with 4003 (forbidden) carrying current_tier /
required_tier. See Close codes for the shared set.
Message format
After the upgrade the server pushes one compact JSON object per new slot:
{ "slot": 348192011, "ts": 1751490000123, "parent": 348192010 }| Field | Type | Meaning |
|---|---|---|
slot | uint64 | Slot whose first shred was just received. |
ts | int64 | Unix milliseconds when Triport received the upstream frame. |
parent | uint64 | Parent slot, when present in the upstream update (omitted otherwise). |
Cadence tracks Solana's slot rate — roughly 2–3 messages per second, one per
slot. The server also sends WebSocket Ping frames every 30s; reply with Pong
(most clients do this automatically) to keep the connection alive.
Delivery semantics
- At-most-once, no replay. This is a live firehose — there is no backfill. On a drop, reconnect; you resume from the current slot.
- De-duplicated by slot. Triport emits each slot's first-shred event once, even across an internal upstream reconnect.
- Managed upstream. The source is Triport's Solana Yellowstone cohort with automatic host failover; a client never sees the internal reconnects, only a continuous slot stream. Empirically the cohort delivers first-shred on essentially every slot with steady uptime.
- Best-effort per client. If a client stops reading and its buffer fills, the server drops events for that client rather than blocking others — treat the stream as sampled under backpressure.
Example (Node.js)
import WebSocket from "ws";
const ws = new WebSocket("wss://triport.io/ws/sol-firstshred", {
headers: { Authorization: `Bearer ${process.env.TRIPORT_API_KEY}` },
});
ws.on("message", (buf) => {
const { slot, ts, parent } = JSON.parse(buf.toString());
// React at the leading edge of slot `slot` (parent=`parent`).
console.log(`first shred: slot=${slot} parent=${parent} t=${ts}`);
});
ws.on("close", (code) => {
// 4001 unauthorized · 4003 forbidden (need Business) · reconnect otherwise
console.error("closed", code);
});Notes
- Business tier. This channel is gated on the
sol_first_shredtier feature, available from Business upward. Lower tiers are refused at the upgrade. - Pair with confirmation. First-shred is an early trigger, not a guarantee — a forming slot can still be skipped. Confirm any action against a standard commitment stream or RPC check.
- See Streaming overview, Authentication, and Rate limits & tiers for account-wide details.