TriportRPC

Solana First-Shred Stream

The earliest slot-level signal Triport exposes — a compact WebSocket fan-out of Solana's first-shred-received slot event, pushed the moment a validator receives the first shred of a new slot, ahead of processed/confirmed.

Method / EndpointWS /ws/sol-firstshred
TypeTriport product (WebSocket)
NetworkSolana
AuthenticationAuthorization: Bearer $TRIPORT_API_KEY (or ?api-key= query param)
Required scopesol.first-shred on the API key (* wildcard keys also work)
Tier / rate limitBusiness 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-firstshred

Authentication

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 }
FieldTypeMeaning
slotuint64Slot whose first shred was just received.
tsint64Unix milliseconds when Triport received the upstream frame.
parentuint64Parent 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_shred tier 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.