> For the complete documentation index, see [llms.txt](https://docs.triton.one/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.triton.one/solana/rpc-methods/real-time-streaming/yellowstone-grpc/subscribe.md).

# Subscribe

Open a Dragon's Mouth gRPC Subscribe stream and send a SubscribeRequest with data-type filters, commitment, from\_slot replay, and ping.

`Subscribe` is a single bidirectional gRPC stream. You send one `SubscribeRequest` describing every data type you want, and the server streams back matching `SubscribeUpdate` messages until you close the connection. You can update the request at any time by sending a new one on the same stream.

## Request

A `SubscribeRequest` carries one map per data type, each keyed by a label you choose, plus stream-wide options:

**`accounts`** · map: see [Account updates](/solana/rpc-methods/real-time-streaming/yellowstone-grpc/accounts.md)

**`transactions`** · map: see [Transaction updates](/solana/rpc-methods/real-time-streaming/yellowstone-grpc/transactions.md)

**`transactions_status`** · map: see [Transaction status](/solana/rpc-methods/real-time-streaming/yellowstone-grpc/transaction-status.md)

**`slots`** · map: see [Slot updates](/solana/rpc-methods/real-time-streaming/yellowstone-grpc/slots.md)

**`blocks`** · map: see [Block updates](/solana/rpc-methods/real-time-streaming/yellowstone-grpc/blocks.md)

**`blocks_meta`** · map: see [Block metadata](/solana/rpc-methods/real-time-streaming/yellowstone-grpc/blocks-meta.md)

**`entry`** · map: see [Entry updates](/solana/rpc-methods/real-time-streaming/yellowstone-grpc/entries.md)

**`block_footer`** · map: Alpenglow block footers (`slot`, `bank_id`, `bank_hash`, `block_producer_time_nanos`, `block_user_agent`), each sent once its block is complete, just before the block's `BlockMeta`. Join with other per-block updates on (`slot`, `bank_id`). Footers are only produced where Alpenglow is active.

**`commitment`** · optional CommitmentLevel: `PROCESSED`, `CONFIRMED`, or `FINALIZED`.

**`accounts_data_slice`** · repeated: return only a slice (`offset`, `length`) of each account's data.

**`from_slot`** · optional uint64: replay from this slot before going live (subject to the replay window, see subscribeReplayInfo).

**`ping`** · optional: in-stream keepalive. Send `SubscribeRequestPing { id }` and the server returns a `SubscribeUpdatePong { id }` on the same stream. A request that carries `ping` only gets the pong; it doesn't change your filters. The server also sends its own `ping` update every 10 seconds. This is the keepalive ping, distinct from the standalone unary `ping`.

## Example

{% tabs %}
{% tab title="grpcurl" %}

```bash
# <proto-dir>: a folder holding geyser.proto and solana-storage.proto (the server has no gRPC reflection)
grpcurl \
  -proto geyser.proto -import-path <proto-dir> \
  -d '{"slots": {"all": {}}, "accounts": {"usdc": {"account": ["EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"]}}, "commitment": "CONFIRMED"}' \
  -H "x-token: <your-token>" \
  <your-endpoint>.mainnet.rpcpool.com:443 \
  geyser.Geyser/Subscribe
```

{% endtab %}
{% endtabs %}

## Update

Every message is a `SubscribeUpdate` carrying `filters` (the labels that matched), `created_at`, and exactly one payload: one of the types above, `entry_update_parent` (see [Entry updates](/solana/rpc-methods/real-time-streaming/yellowstone-grpc/entries.md)), `ping`, or `pong`. Subscribe to a specific type to see its shape.

## Block footer

The server sends a footer once its block is complete, just before the block's `BlockMeta`. Join it with other per-block updates on (`slot`, `bank_id`).

`SubscribeRequestFilterBlockFooter`, keyed by a filter label:

**`include_certificates`** · optional bool: `true` also sends the certificates the footer carries, listed below. Any of them can be absent. Omitted or `false` sends footer metadata only.

Each footer arrives as a `SubscribeUpdate` with `block_footer` set (`SubscribeUpdateBlockFooter`):

**`slot`** · uint64: Slot of the block.

**`bank_id`** · uint64: Bank instance the footer belongs to.

**`bank_hash`** · bytes: Bank hash.

**`block_producer_time_nanos`** · uint64: Block producer time, in nanoseconds.

**`block_user_agent`** · bytes: Block producer user agent, at most 255 bytes.

**`block_final_cert`** · BlockFooterFinalCert: Only with `include_certificates`. Proves that an earlier block is finalized: the highest finalized block the producer knew of when it built this block. `slot` is that block's slot, not the footer's. With slow finalization, `final_aggregate` signs a finalize vote on the slot and `notar_aggregate` a notarize vote on the block. With fast finalization, `final_aggregate` alone signs on the block.

**`skip_reward_cert`** · BlockFooterSkipRewardCert: Only with `include_certificates`. `slot` and an `aggregate` of the validators that voted skip on the slot.

**`notar_reward_cert`** · BlockFooterNotarRewardCert: Only with `include_certificates`. `slot` and an `aggregate` of the validators that voted notarize on the slot's block.

Each `aggregate` is a `BlockFooterVotesAggregate`:

**`signature_kind`** · BlockFooterSignatureKind: `COMPRESSED_BLS12_381_G2`, a 96-byte signature. Reject any kind you do not know.

**`signature`** · bytes: Aggregate signature over the vote.

**`block_id`** · bytes: ID of the block the votes are for, not the PoH blockhash. Empty for votes on a slot.

**`signer_bitmap`** · bytes: `solana-signer-store` bitmap: version byte, u16 little-endian bit count, payload. Bit i is the validator at rank i in the epoch of the certificate's slot, ordered by stake descending, then BLS pubkey.

***

<i class="fa-life-ring">:life-ring:</i> Contact support by clicking the chat icon in your [customer dashboard](https://customers.triton.one)\ <i class="fa-briefcase">:briefcase:</i> Sales questions? [Contact us](https://triton.one/contact)\ <i class="fa-sparkles">:sparkles:</i> AI agent? Read [llms.txt](https://docs.triton.one/llms.txt)\ <i class="fa-rss">:rss:</i> Follow updates: [Blog](https://blog.triton.one) · [X](https://x.com/triton_one) · [YouTube](https://www.youtube.com/@triton_one_ltd) · [Telegram](https://t.me/tritonone) · [GitHub](https://github.com/rpcpool)
