- Price: $399 per calendar month
- Transport: server-streaming gRPC over TLS
- Endpoint:
console.shredo.xyz:443 - Protocol:
shredo.decoded.v1.DecodedTransactions/Subscribe
Purchase and connect
- Open Products in the Shredo console and choose Decoded Transactions. Raw Shreds is not a prerequisite.
- Choose a calendar-month period and pay the invoice in native USDC on Solana. Press Check payment after your transfer finalizes.
- Open Decoded Transactions under My services and create an API key. Save the key immediately: its secret is shown only once.
- Download the Protobuf definition and use a TLS-capable gRPC client.
- Send the API key in the
authorizationmetadata header asBearer YOUR_API_KEY. Do not put a key in a URL or commit it to source control.
grpcurl installed, set SHREDO_API_KEY securely in your environment, replace PROGRAM_ID with a valid program address and run this filtered connection test:
{}) 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
EveryStreamEvent 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 inSubscribeRequest 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 ofsigned_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
Handlegap 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.