Skip to main content
  • Price: $399 per calendar month
  • Transport: server-streaming gRPC over TLS
  • Endpoint: console.shredo.xyz:443
  • Protocol: shredo.decoded.v1.DecodedTransactions/Subscribe
Decoded Transactions delivers authenticated, signed Solana transactions before canonical execution is known. Each transaction includes signatures, instructions, account keys and observation metadata. An event means observed signed intent, not proof that a transaction landed, succeeded or reached a commitment level. This is Shredo’s own versioned protocol, not a Yellowstone-compatible endpoint.

Purchase and connect

  1. Open Products in the Shredo console and choose Decoded Transactions. Raw Shreds is not a prerequisite.
  2. Choose a calendar-month period and pay the invoice in native USDC on Solana. Press Check payment after your transfer finalizes.
  3. Open Decoded Transactions under My services and create an API key. Save the key immediately: its secret is shown only once.
  4. Download the Protobuf definition and use a TLS-capable gRPC client.
  5. Send the API key in the authorization metadata header as Bearer YOUR_API_KEY. Do not put a key in a URL or commit it to source control.
Start with the programs or accounts your application actually needs. With grpcurl installed, set SHREDO_API_KEY securely in your environment, replace PROGRAM_ID with a valid program address and run this filtered connection test:
No public receiving IP or UDP port is required. Your client initiates the connection. Server reflection is not required when using the published Protobuf file. An empty request ({}) selects every transaction allowed by your saved service filters. With empty saved filters, this is the full feed, not a low-volume connection test. Pretty-printing every event in a terminal is not a production ingestion strategy.

Transaction envelope

Every StreamEvent has a schema_version, stream_id and delivery_sequence, followed by one transaction, gap or heartbeat event. Use the Protobuf definition as the authoritative wire contract. Protobuf bytes fields appear as base64 in grpcurl JSON. Large integer fields may appear as decimal strings. Do not convert sequence numbers or timestamps through a lossy floating-point representation.

Program and account filters

In your service settings, save up to 32 program IDs and up to 32 account keys. Each must be a valid 32-byte base58 Solana address. An empty list does not restrict that category. Within a category, any listed address may match. When both categories are populated, both conditions must match. These server-side filters apply to all API keys for the subscription. Optional filters in SubscribeRequest can further restrict a connection; they cannot bypass the service settings. After changing saved filters, reconnect your client. Existing streams terminate when their authorization lease refreshes so the new restrictions apply. Address Lookup Table resolution is bounded and may be unavailable temporarily. Unfiltered streams expose the resolution status. When an unresolved observation prevents a reliable filter decision, the stream reports a gap rather than silently treating the transaction as a non-match. Absence from the feed never proves that a transaction did not exist.

Receiving capacity and overload

The full feed requires a receiving server with enough network bandwidth and processing capacity to keep up continuously. Traffic varies; measure total encoded event bytes over time, allow for transport overhead and leave headroom for bursts. The size of signed_transaction_bytes alone understates the stream because events also contain decoded instructions, account keys, signatures and metadata. Read the gRPC stream continuously. Keep expensive downstream work and per-message terminal output out of the receiving loop, and use bounded downstream queues. If your receiver cannot sustain the full feed, narrow the program/account filters rather than repeatedly reconnecting to the same unfiltered stream. RESOURCE_EXHAUSTED has more than one cause. A consumer queue exhausted message during delivery means the subscription exceeded its retained backlog allowance. A global journal capacity exhausted message indicates shared backlog pressure. Connection or service-stream capacity errors at subscription time instead mean too many open streams; check the simultaneous-stream limits before retrying. These errors do not by themselves identify a network fault. After correcting capacity or reducing filters, reconnect with capped exponential backoff and jitter. Handle the new subscription gap and stream epoch explicitly. Reconnecting does not replay missed transactions or recover an incomplete interval; a larger local queue cannot fix a sustained receive-rate deficit.

Pause, keys and renewal

Pause and resume delivery in My services. Pausing does not pause billing: the calendar-month period starts from the finalized payment time. Renewal extends the paid period without requiring another Raw Shreds subscription. Create a replacement key, update your client, then revoke the previous key to rotate credentials. You may have at most three active keys. Keys cannot be retrieved later; create a replacement if a key is lost. Administrators see key metadata, not the secret. Pauses, revoked keys, account restrictions and administrator stops terminate existing access within the authorization lease, at most 30 seconds. Customer resume does not override an administrator stop or an account restriction.

Continuity and limits

Handle gap events and changes to stream_id; discard assumptions about uninterrupted continuity after reconnecting. delivery_sequence orders messages within one connection, not blockchain execution. Heartbeats describe the gateway’s recent input health, not transaction finality. Historical replay is not provided. The default limit is four simultaneous streams per service, shared across its API keys. The gateway also has global stream, event-queue and byte limits. A slow consumer is disconnected with RESOURCE_EXHAUSTED rather than delaying other subscribers; reconnect and treat the interruption as a gap. Canonical success, execution logs, finality and DEX-specific interpretation are not included. Use an execution/state feed separately when your application requires them.