Look up what a Substreams client sends and receives. GraphOps Substreams exposes standard Substreams gRPC endpoints, so standard Substreams tooling works with a GraphOps endpoint URL and API key. This page lists the stream inputs, the messages a consumer handles, and where the upstream protocol reference lives.
Endpoint patterns
https://<CHAIN_ID>.evm.substreams.graphops.xyzEndpoint preview
The CLI uses SUBSTREAMS_API_KEY.
Replace placeholders with your identifier and API key before making requests.
Use Supported networks for supported chains and testnet availability.
Transport
Substreams uses gRPC streams. A client selects:
| Field | Meaning |
|---|---|
| Endpoint | GraphOps chain endpoint. |
| Package | Public package name, package URL, local .spkg, or other standard package reference. |
| Module | Output module to stream. |
| Start block | First block to process. |
| Stop block | Optional end block or relative range. |
| Cursor | Optional resume point from a previous stream. |
| Authentication | SUBSTREAMS_API_KEY for CLI, or x-api-key: <GRAPHOPS_API_KEY> for raw gRPC clients. |
Request
The CLI tab is a complete command. The Go, Rust, and TypeScript tabs show the values a standard Substreams client library needs; generate Protobuf types for the package's output module before you decode messages.
export SUBSTREAMS_API_KEY="<GRAPHOPS_API_KEY>"
substreams run \
-e "https://1.evm.substreams.graphops.xyz" \
"https://github.com/streamingfast/substreams-explorers/releases/download/v1.0.1/ethereum-explorer-v0.1.2.spkg" \
"map_block_meta" \
--start-block 18000000 \
--stop-block +5 \
-o jsonpackage main
import (
"context"
"fmt"
)
const endpoint = "https://1.evm.substreams.graphops.xyz"
const packageRef = "https://github.com/streamingfast/substreams-explorers/releases/download/v1.0.1/ethereum-explorer-v0.1.2.spkg"
const moduleName = "map_block_meta"
func main() {
ctx := context.Background()
headers := map[string]string{
"x-api-key": "<GRAPHOPS_API_KEY>",
}
fmt.Println(ctx, endpoint, packageRef, moduleName, headers)
// Create a standard Substreams gRPC client, attach the headers, and stream the module.
// Persist each returned cursor after the corresponding block-scoped data is committed.
}const ENDPOINT: &str = "https://1.evm.substreams.graphops.xyz";
const PACKAGE_REF: &str = "https://github.com/streamingfast/substreams-explorers/releases/download/v1.0.1/ethereum-explorer-v0.1.2.spkg";
const MODULE_NAME: &str = "map_block_meta";
fn main() {
let x_api_key = "<GRAPHOPS_API_KEY>";
println!("{ENDPOINT} {PACKAGE_REF} {MODULE_NAME} {x_api_key}");
// Create a standard Substreams gRPC client, attach the x-api-key metadata,
// and persist each cursor after committing block-scoped data.
}const endpoint = "https://1.evm.substreams.graphops.xyz";
const packageRef = "https://github.com/streamingfast/substreams-explorers/releases/download/v1.0.1/ethereum-explorer-v0.1.2.spkg";
const moduleName = "map_block_meta";
const headers = {
"x-api-key": "<GRAPHOPS_API_KEY>",
};
console.log({ endpoint, packageRef, moduleName, headers });
// Create a standard Substreams gRPC transport, attach the headers,
// and resume from the latest committed cursor after reconnecting.Response
A stream sends these standard Substreams messages:
| Message | Meaning | Consumer action |
|---|---|---|
SessionInit | Stream session metadata. | Log the session and continue. |
BlockScopedData | Output for one block and a cursor. | Commit the output, then persist the cursor. |
BlockUndoSignal | Reorg correction with last valid block and cursor. | Revert local state to the last valid point. |
ModulesProgress | Progress and processed-byte metadata. | Use for logs, metrics, and backfill progress. |
InitialSnapshotData | Snapshot data for supported sink flows. | Process before live or range output. |
InitialSnapshotComplete | Snapshot completion marker. | Mark snapshot ingestion complete. |
Authentication
See Authentication for API-key creation, x-api-key headers,
and secret handling. Route-token authentication is not supported for Substreams.
Standard reference
GraphOps supports standard Substreams behavior. Use upstream Substreams documentation for protocol, package, manifest, module, and sink details:
- Substreams documentation
- Substreams package registry
- Substreams core concepts
- Substreams manifest and components