> ## Documentation Index
> Fetch the complete documentation index at: https://docs.shredo.xyz/llms.txt
> Use this file to discover all available pages before exploring further.

# Decoded Transactions

> Connect to Shredo Decoded Transactions over TLS gRPC. API keys, program and account filters, transaction events, gaps, pause and calendar-month billing.

* **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](https://shredo.xyz/protocol/decoded.proto) 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:

```sh theme={null}
grpcurl -proto decoded.proto \
  -H "authorization: Bearer $SHREDO_API_KEY" \
  -d '{"programIds":["PROGRAM_ID"]}' console.shredo.xyz:443 \
  shredo.decoded.v1.DecodedTransactions/Subscribe
```

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.

| Field | Meaning |
| - | - |
| `slot` | Slot associated with the observation; not a finality guarantee |
| `entry_range_start`, `entry_range_end` | Reconstruction range metadata |
| `entry_ordinal`, `transaction_ordinal` | Ordinals local to the reconstructed batch/range, not a canonical transaction index in a block |
| `signature`, `signatures` | Primary signature and all required transaction signatures |
| `signed_transaction_bytes` | Serialized signed transaction for a Solana-compatible parser |
| `message_version` | Transaction message version |
| `instructions` | Compiled instructions with account indexes and instruction data |
| `static_account_keys`, `address_table_lookups` | Message account keys and lookup descriptors |
| `resolved_account_keys`, `account_keys`, `program_ids` | Resolved lookup keys, combined account ordering and invoked programs when resolution is available |
| `account_resolution_status` | Whether address lookup resolution completed |
| `observed_at_unix_ns` | Gateway observation timestamp, not a validator execution timestamp or a latency benchmark |

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.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.