Developers

SQD developer resources

Everything needed to build against SQD, each at a URL that does not move. The SQD Portal API and its OpenAPI specification, how authentication and rate limits work, what the API guarantees and how it announces a change, the SQD MCP servers, the Squid CLI, and the files an agent reads before any of it.

If you are an agent, start with llms.txt and openapi.json. Every page on sqd.dev is also served as Markdown to a request that asks for it.

SQD Portal API

The SQD Portal is a plain HTTP API serving onchain data from 130+ networks, with no node, archive, or indexer of your own. Responses to the stream endpoints are JSON Lines, so a client reads them incrementally instead of buffering a whole range. Start at GET /datasets: the dataset name every other call takes comes from that list.

First request · no key required
curl -s -X POST https://portal.sqd.dev/datasets/ethereum-mainnet/stream \
-H 'content-type: application/json' \
-d '{"type":"evm","fromBlock":18000000,"toBlock":18000000,
"fields":{"block":{"number":true,"timestamp":true}}}'
ResourceURLWhat it is
  • SQD Portal base URLhttps://portal.sqd.devHost every Portal API call goes to
  • SQD Portal API referencehttps://docs.sqd.dev/en/api/evm/introductionEndpoint reference and request playground
  • SQD Portal quickstarthttps://docs.sqd.dev/en/portal/evm/quickstartFirst query, start to finish
  • Dataset listhttps://portal.sqd.dev/datasetsEvery network this Portal serves, with aliases

OpenAPI specification

The whole documented Portal surface is described in OpenAPI 3.1 at sqd.dev/openapi.json. Every operation carries a stable operationId, typed parameters, and a response schema, which is what a function-calling adapter or a client generator needs. It is also the document to diff in a pipeline when you want to detect a change to the API.

ResourceURLWhat it is
  • OpenAPI specificationhttps://sqd.dev/openapi.jsonOpenAPI 3.1, an operationId and a response schema per operation
  • OpenAPI specification (documentation copy)https://docs.sqd.dev/openapi.jsonThe same API, published from the documentation site

Authentication

The public Portal at https://portal.sqd.dev is shared capacity, intended for development and bounded evaluation. Authenticated and dedicated portals take an API key in the x-api-key request header. Paths and payloads are identical either way, so a client written against the public Portal moves to a dedicated one by adding one header and changing the host.

ResourceURLWhat it is
  • API keys and access optionshttps://docs.sqd.dev/en/portal/pricingPublic, authenticated and dedicated portals, and how keys are issued
  • Request a dedicated portalhttps://sqd.dev/contact/Contact form for keys, volume and dedicated capacity

Rate limits and retries

When the Portal is at capacity it answers with error type rate_limit_error and code overloaded. A Retry-After header is mandatory on those responses, is always at least one second, and is always a count of seconds rather than an HTTP date. Honor it: that value is the throttle signal, and there is no separate quota header to poll.

A transient failure arrives as availability_error instead, which may also carry Retry-After and is safe to retry with your own backoff when it does not. Branch on error.type, match on error.code, and never parse error.message.

Browser clients can read the throttle signal: the Portal exposes retry-after and x-request-id through CORS, alongside the stream metadata headers x-sqd-data-source, x-sqd-head-number, x-sqd-finalized-head-number and x-sqd-finalized-head-hash. None of those are on the Fetch safelist, so without that exposure a browser would see a status code and nothing else. Quote x-request-id when reporting a problem.

ResourceURLWhat it is
  • Error handling and retrieshttps://docs.sqd.dev/en/portal/introduction/error-handlingThe error envelope, the four error types, and when to retry
  • Rate limitshttps://docs.sqd.dev/en/portal/introduction/versioningShared capacity, Retry-After, and the authenticated options

Versioning and deprecation policy

The Portal API carries no version in its URL and no version header. There is no /v1/. Every client talks to the same surface at https://portal.sqd.dev, and that works because the surface grows by addition: new dataset types, new block and transaction fields, and new datasets appear without changing what an existing request means.

StableNot stable
  • Endpoint paths and HTTP methodsThe prose in error.message
  • The error envelope {"error":{"type","code","message"}}The order of datasets in GET /datasets
  • error.type, a closed set of four valuesThe set of datasets, which grows and is occasionally pruned
  • error.code values, once publishedWorker assignments in GET /datasets/{dataset}/state
  • Field names in a selector, once accepted
What the Portal API guarantees, and what it does not. Full table and examples in the versioning policy.

The surface that does move is the dataset catalogue. Datasets are added as networks are onboarded, and occasionally retired. A retirement is announced in advance on the Announcements page and in the developer chat, naming the affected datasets and a date, so watch that page rather than polling for removals. After the date, GET /datasets/{dataset}/metadata answers 404 with error.code of unknown_dataset.

The SDKs are versioned separately, as npm packages following semantic versioning. A breaking change lands in a major release with a migration guide, and the Portal keeps serving older SDK versions: the wire format they depend on is the same additive surface described above.

ResourceURLWhat it is
  • Versioning and change policyhttps://docs.sqd.dev/en/portal/introduction/versioningWhat is stable, what is not, and how the API changes
  • Announcementshttps://docs.sqd.dev/announcementsDeprecations and dataset retirements, announced ahead of the date
  • Changeloghttps://docs.sqd.dev/changelogWhat was released, and when

MCP servers

Two SQD MCP servers, for two different jobs. The SQD Portal MCP server at https://portal.sqd.dev/mcp exposes onchain queries as agent tools, across EVM, Solana, Bitcoin, Substrate and Hyperliquid. The SQD Documentation MCP server at https://docs.sqd.dev/mcp answers questions from the documentation. Both speak the Streamable HTTP transport and negotiate protocol version 2025-06-18. Neither needs a key.

One handshake detail decides whether a client connects at all. The Streamable HTTP transport requires the initializing POST to accept both media types, and a request sending only application/json is answered 406 Not Acceptable, as is a request with no Accept header. The exact call that works:

MCP initialize · both media types required
curl -s -X POST https://portal.sqd.dev/mcp \
-H 'content-type: application/json' \
-H 'accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{
"protocolVersion":"2025-06-18","capabilities":{},
"clientInfo":{"name":"my-client","version":"1.0.0"}}}'

Most MCP clients send that header pair for you. Add the server by URL and the client handles the rest; the setup guides cover Claude, Cursor, VS Code and the rest.

ResourceURLWhat it is
  • SQD Portal MCP serverhttps://portal.sqd.dev/mcpOnchain queries as agent tools, over Streamable HTTP
  • SQD Documentation MCP serverhttps://docs.sqd.dev/mcpSearch and retrieval over the documentation, over Streamable HTTP
  • MCP server cardhttps://sqd.dev/.well-known/mcp.jsonMachine-readable description of the Portal MCP server
  • Portal MCP setup guidehttps://docs.sqd.dev/en/ai/mcp-serverClient configuration for Claude, Cursor, VS Code and others
  • Documentation MCP setup guidehttps://docs.sqd.dev/en/ai/mcp-server-docsClient configuration for the documentation server

Squid CLI

The Squid CLI is published on npm as @subsquid/cli and installs one command, sqd. It scaffolds an indexer from a template, runs it locally, and deploys and manages it on SQD Cloud, which means an agent or a script can drive the whole lifecycle without writing an API client first.

Install the sqd command
npm install -g @subsquid/cli
sqd --version
ResourceURLWhat it is
  • Squid CLI on npmhttps://www.npmjs.com/package/@subsquid/cliPackage @subsquid/cli, which installs the sqd command
  • Squid CLI sourcehttps://github.com/subsquid/squid-cliRepository, issues and release history
  • SQD Cloud deploymenthttps://docs.sqd.dev/en/cloud/overviewWhat sqd deploy targets, and how to operate it

SDKs

Two SDKs and the raw API, for three different jobs. The Pipes SDK builds streaming pipelines into ClickHouse, PostgreSQL, BigQuery or Parquet. The Squid SDK builds indexers that serve a generated GraphQL API over PostgreSQL. Calling the Portal API directly needs no dependency at all and works from any language.

ResourceURLWhat it is
  • SDK overviewhttps://docs.sqd.dev/en/sdk/overviewPipes SDK, Squid SDK and the raw API compared on the same job
  • Pipes SDK quickstarthttps://docs.sqd.dev/en/sdk/pipes-sdk/evm/quickstartPackage @subsquid/pipes: streaming pipelines into a warehouse
  • Squid SDK quickstarthttps://docs.sqd.dev/en/sdk/squid-sdk/evm/quickstartIndexers that serve a generated GraphQL API over PostgreSQL
  • Pipes SDK on npmhttps://www.npmjs.com/package/@subsquid/pipesPackage @subsquid/pipes, released on semantic versioning

Files for agents

The machine-readable surfaces sqd.dev publishes, each at its standard location. The API catalog is RFC 9727, the MCP server card follows the SEP-1649 draft, and the skill index follows the Agent Skills discovery RFC. The homepage advertises all of them in a Link response header, so a client that reads headers finds them without a second request.

Any page on sqd.dev is also served as Markdown to a request that asks for it. There is no .md suffix to append: negotiation is on the Accept header alone.

Any page, as Markdown
curl -s -H 'accept: text/markdown' https://sqd.dev/developers/
ResourceURLWhat it is
  • llms.txthttps://sqd.dev/llms.txtSite index for LLMs: when to use SQD, and every page
  • llms-full.txthttps://sqd.dev/llms-full.txtFull reference: architecture, endpoints, pricing, examples
  • Agent skillhttps://sqd.dev/.well-known/agent-skills/sqd/SKILL.mdWhen to use SQD, how to call it, and what it does not serve
  • Agent Skills indexhttps://sqd.dev/.well-known/agent-skills/index.jsonDiscovery index with a digest for each published skill
  • Indexer-building skillhttps://docs.sqd.dev/skill.mdDeeper skill covering squid.yaml, schemas, targets and deployment
  • API cataloghttps://sqd.dev/.well-known/api-catalogRFC 9727 linkset of every SQD API surface
  • Sitemaphttps://sqd.dev/sitemap.xmlEvery indexable URL on sqd.dev

Support

Technical questions go to the developer chat, where the engineers who maintain the Portal and the SDKs answer. Dedicated portals, volume, and pricing go through the contact form.

ResourceURLWhat it is
  • Developer chathttps://t.me/hydradevsTelegram community, where the maintainers answer
  • Contact SQDhttps://sqd.dev/contact/Sales, dedicated portals and partnerships
  • Supported networkshttps://sqd.dev/chains/Every network SQD indexes, searchable