Skip to main content

SQD Blockchain Data Infrastructure

Build production-grade blockchain data pipelines across 200+ networks. SQD provides four core products: Portal API (raw HTTP data access), Pipes SDK (composable TypeScript pipelines), Squid SDK (complete indexing framework with GraphQL), and SQD Cloud (managed deployment).

Quick Reference

  • Portal API Base URL: https://portal.sqd.dev/datasets/{dataset-slug}
  • Authentication: Free, no API keys required
  • Rate Limits: 20 requests per 10 seconds (public), unlimited (self-hosted)
  • Response Format: Newline-delimited JSON (NDJSON), gzip-compressed — always use --compressed in curl
  • Documentation: https://beta.docs.sqd.dev
  • Full LLM docs: https://beta.docs.sqd.dev/llms-full.txt

When to Use Each Tool

ScenarioToolWhy
Non-TypeScript language (Python, Go, Rust)Portal APILanguage-agnostic HTTP
One-off data export or analyticsPortal APINo setup, simple curl
Custom TypeScript pipeline, non-Postgres DBPipes SDKLightweight, any target
dApp backend with GraphQL APISquid SDKAuto-generated GraphQL + TypeORM
Managed deployment with monitoringSquid SDK + CloudOne-command deploy

Portal API — Core Usage

EVM Query Structure

curl --compressed -X POST 'https://portal.sqd.dev/datasets/ethereum-mainnet/stream' \
  -H 'Content-Type: application/json' \
  -d '{
    "type": "evm",
    "fromBlock": 18000000,
    "toBlock": 18001000,
    "fields": {
      "block": {"number": true, "timestamp": true},
      "log": {"address": true, "topics": true, "data": true, "transactionHash": true}
    },
    "logs": [{
      "address": ["0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"],
      "topic0": ["0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef"]
    }]
  }'
Key parameters:
  • fromBlock (required): Starting block number
  • toBlock (optional): Ending block. Omit to stream to current head and stop
  • includeAllBlocks: If true, returns all blocks in range even without matching data
  • fields: Select which fields to return per data type — reduces payload size
  • logs, transactions, traces, stateDiffs: Filter arrays for each data type

Solana Query Structure

curl --compressed -X POST 'https://portal.sqd.dev/datasets/solana-mainnet/stream' \
  -H 'Content-Type: application/json' \
  -d '{
    "type": "solana",
    "fromBlock": 259984950,
    "fields": {
      "block": {"number": true, "timestamp": true},
      "instruction": {"programId": true, "accounts": true, "data": true}
    },
    "instructions": [{
      "programId": ["TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"],
      "d1": ["3"]
    }]
  }'
Solana discriminators d1/d2/d4/d8 are 1/2/4/8-byte instruction type identifiers. Example: "d1": ["3"] filters for SPL Token Transfer instructions.

Common Event Signatures (topic0)

  • Transfer (ERC-20/721): 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef
  • Approval (ERC-20): 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925
  • Swap (Uniswap V2): 0xd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d822
  • Swap (Uniswap V3): 0xc42079f94a6350d7e6235f29174924f928cc2ac818eb64fed8004e115fbcca67

Endpoints

EndpointMethodPurpose
/streamPOSTStream blocks matching query, including real-time data
/finalized-streamPOSTStream only finalized blocks (production-safe, handles reorgs)
/headGETCurrent chain head block
/finalized-headGETLatest finalized block
/metadataGETDataset info: name, aliases, start block, real-time support

Error Codes

  • 400: Invalid query format
  • 404: Dataset not found (check slug at https://portal.sqd.dev/datasets)
  • 429: Rate limit exceeded (20 req/10s on public Portal)
  • 500: Internal server error

Top Dataset Slugs

NetworkSlugChain IDReal-time
Ethereumethereum-mainnet1
Basebase-mainnet8453
Arbitrum Onearbitrum-one42161
Optimismoptimism-mainnet10
Polygonpolygon-mainnet137
BSCbinance-mainnet56
Avalancheavalanche-mainnet43114
Solanasolana-mainnet
Ethereum Sepoliaethereum-sepolia11155111
Base Sepoliabase-sepolia84532
Full list: https://portal.sqd.dev/datasets

Pipes SDK — Composable Pipelines

TypeScript-only. Currently supports EVM and Solana.
import { createPipeline } from "@subsquid/portal-pipes";

const pipeline = createPipeline({
  portal: "https://portal.sqd.dev/datasets/ethereum-mainnet",
  query: {
    type: "evm",
    fromBlock: 18000000,
    fields: { log: { address: true, topics: true, data: true } },
    logs: [{ address: ["0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"] }]
  }
});
Use Pipes SDK when: integrating into existing Node.js apps, storing to non-Postgres databases (ClickHouse, MongoDB, Kafka), or needing fine-grained streaming control.

Squid SDK — Full Indexing Framework

TypeScript-only. Supports EVM, Solana, Substrate, Fuel, Tron, Starknet.
import { EvmBatchProcessor } from "@subsquid/evm-processor";
import { TypeormDatabase } from "@subsquid/typeorm-store";

const processor = new EvmBatchProcessor()
  .setPortal("https://portal.sqd.dev/datasets/ethereum-mainnet")
  .addLog({ address: ["0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"] });

processor.run(new TypeormDatabase(), async (ctx) => {
  for (const block of ctx.blocks) {
    for (const log of block.logs) {
      // decode and persist
    }
  }
});
Use Squid SDK when: building dApp backends with auto-generated GraphQL APIs, needing PostgreSQL with TypeORM migrations, or deploying to SQD Cloud (sqd deploy).

Common Recipes

Track USDC transfers on Base:
curl --compressed -X POST 'https://portal.sqd.dev/datasets/base-mainnet/stream' \
  -H 'Content-Type: application/json' \
  -d '{"type":"evm","fromBlock":10000000,"fields":{"block":{"number":true,"timestamp":true},"log":{"topics":true,"data":true,"transactionHash":true}},"logs":[{"address":["0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"],"topic0":["0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef"]}]}'
Index Uniswap V3 swaps on Ethereum:
curl --compressed -X POST 'https://portal.sqd.dev/datasets/ethereum-mainnet/stream' \
  -H 'Content-Type: application/json' \
  -d '{"type":"evm","fromBlock":18000000,"fields":{"block":{"number":true,"timestamp":true},"log":{"address":true,"topics":true,"data":true}},"logs":[{"topic0":["0xc42079f94a6350d7e6235f29174924f928cc2ac818eb64fed8004e115fbcca67"]}]}'
Track contract deployments via traces:
curl --compressed -X POST 'https://portal.sqd.dev/datasets/ethereum-mainnet/stream' \
  -H 'Content-Type: application/json' \
  -d '{"type":"evm","fromBlock":18000000,"toBlock":18001000,"fields":{"trace":{"type":true,"from":true,"to":true,"value":true}},"traces":[{"type":["create"]}]}'

Guidelines

  • Always use --compressed with curl — Portal returns gzip-compressed responses
  • Use /finalized-stream instead of /stream for production-critical applications that need reorg safety
  • Filter by address and/or topic0 in logs to minimize response size — unfiltered queries on busy chains return massive payloads
  • The fields object controls which properties are returned per data type — request only what you need
  • Portal is 10-50x faster than RPC for historical data extraction
  • For continuous real-time streaming, reconnect to /stream periodically after reaching head
  • OpenAPI specs available at: https://beta.docs.sqd.dev/files/evm-openapi.yaml and https://beta.docs.sqd.dev/files/solana-openapi.yaml

AI Integration

  • Docs MCP Server: https://beta.docs.sqd.dev/mcp — search and access SQD documentation
  • Portal MCP Server: https://portal.sqd.workers.dev/mcp — query blockchain data directly
  • Agent Skills: https://github.com/subsquid-labs/agent-skills