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": ["0x03"]
    }]
  }'
Solana discriminators d1/d2/d4/d8 are 1/2/4/8-byte instruction type identifiers in 0x-prefixed hex format. Example: "d1": ["0x03"] filters for SPL Token Transfer instructions.

Bitcoin Query Structure

curl --compressed -X POST 'https://portal.sqd.dev/datasets/bitcoin-mainnet/stream' \
  -H 'Content-Type: application/json' \
  -d '{
    "type": "bitcoin",
    "fromBlock": 880000,
    "toBlock": 880000,
    "fields": {
      "block": {"number": true, "hash": true, "timestamp": true},
      "transaction": {"txid": true, "hash": true, "size": true, "vsize": true, "weight": true},
      "input": {"transactionIndex": true, "inputIndex": true, "txid": true, "vout": true, "prevoutValue": true, "prevoutScriptPubKeyAddress": true},
      "output": {"transactionIndex": true, "outputIndex": true, "value": true, "scriptPubKeyAddress": true, "scriptPubKeyType": true}
    },
    "transactions": [{}]
  }'
Bitcoin-specific data types:
  • transactions: Transaction data (txid, hash, size, vsize, weight, version, locktime). Use "transactions": [{}] to match all. Set inputs: true / outputs: true to include related data
  • inputs: Transaction inputs with prevout data. Filter by prevoutScriptPubKeyAddress, prevoutScriptPubKeyType, or prevoutGenerated (coinbase). Set transaction: true to include parent tx
  • outputs: Transaction outputs. Filter by scriptPubKeyAddress or scriptPubKeyType (e.g. witness_v1_taproot, witness_v0_keyhash, pubkeyhash, scripthash, nulldata). Set transaction: true to include parent tx
Bitcoin block fields: number, hash, parentHash, timestamp, medianTime, version, merkleRoot, nonce, target, bits, difficulty, chainWork, strippedSize, size, weight

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)
  • 204: Requested block range exceeds available data
  • 409: Chain reorg conflict — retry with updated block range
  • 429: Rate limit exceeded (20 req/10s on public Portal)
  • 500: Internal server error
Important: fromBlock is required. Omitting it silently streams from block 0, which is expensive and almost never what you want.

Top Dataset Slugs

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

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"]}]}'
Query Bitcoin Taproot outputs:
curl --compressed -X POST 'https://portal.sqd.dev/datasets/bitcoin-mainnet/stream' \
  -H 'Content-Type: application/json' \
  -d '{"type":"bitcoin","fromBlock":880000,"toBlock":880000,"fields":{"block":{"number":true,"timestamp":true},"output":{"transactionIndex":true,"outputIndex":true,"value":true,"scriptPubKeyType":true,"scriptPubKeyAddress":true}},"outputs":[{"scriptPubKeyType":["witness_v1_taproot"]}]}'
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

Portal MCP Server — Convenience Tools

The Portal MCP Server (https://portal.sqd.dev/mcp) provides high-level tools that are often more useful than raw curl for AI workflows:
ToolWhat it does
portal_get_erc20_transfersAuto-decodes Transfer events, adds token metadata, formats human-readable amounts
portal_get_nft_transfersERC721/ERC1155 transfers. Note: token_standard: "erc721" is not supported (ERC-721 shares Transfer signature with ERC-20). Use "erc1155" or "both", or provide specific contract_addresses
portal_get_wallet_summaryFull wallet activity: transactions + tokens + NFTs
portal_get_gas_analyticsGas price trends, cost estimates
portal_get_contract_activityContract usage stats, top callers
portal_aggregate_transfersAggregate ERC20 transfer stats without fetching all records
portal_decode_logsDecode event logs using known signatures (Swap, Transfer, etc.)
portal_block_at_timestampConvert Unix timestamp to block number
portal_count_eventsCount events without fetching data (note: group_by: "topic0" may return “unknown”)
portal_get_recent_transactionsRecent txs without manual block math
portal_get_top_contractsMost active contracts by tx count
portal_get_time_seriesAggregate metrics over time intervals
portal_query_hyperliquid_fillsHyperliquid trade executions, PnL, fees
portal_query_hyperliquid_replica_cmdsHyperliquid orders, cancels, transfers, leverage
portal_list_datasetsList/search available datasets
portal_get_token_infoToken metadata from CoinGecko (name, symbol, logo). Won’t find obscure/new tokens not listed on CoinGecko
portal_get_dataset_infoDataset details: latest block, chain type, tables
portal_get_block_numberCurrent/latest block number
portal_streamRaw Portal API streaming queries
Prefer MCP convenience tools over raw curl when available — they auto-decode values, add token metadata, and format amounts.

AI Integration

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