Introduction

The DC Explorer API is a public REST surface over Datachain Rope (chainId 271828). All endpoints return JSON and are CORS-enabled. Responses use the Quipu Primitive Canon vocabulary: cord anchors (block-equivalents), strings (per-entity ledgers), and knots (individually addressable events).

Base URL: https://dcscan.io/api/v1 # Anyone can call the API. Identified traffic (X-API-Key) gets an auditable # usage trail and priority when rate-limit tiers activate. curl -s https://dcscan.io/api/v1/stats

API Keys

API keys are minted by authenticated users through Datachain ID - sign in with your Datawallet+ credentials or prove ownership of your wallet key (EIP-191 signature). Keys are shown once at creation; only a hash is stored server-side. Up to 5 active keys per identity.

Using your key

Send the key as an X-API-Key header on any endpoint. Verify it (and read your usage counters) at any time:

# attach the key to any API call curl -s -H "X-API-Key: dcsk_…" https://dcscan.io/api/v1/stats # check validity + usage counters curl -s -H "X-API-Key: dcsk_…" https://dcscan.io/api/v1/keys/verify
POST/keysMint a key (Bearer Datachain ID token)
GET/keysList your keys, masked
DELETE/keys/{id}Revoke a key
GET/keys/verifyValidate an X-API-Key

Secured Semantic History API

https://semantic-agent.datachain.network/v1 is the authenticated API for enriched knot search and wallet transaction-history export. A normal caller can query only wallets linked to their Datachain ID identity. An approved exchange or custodian wallet can receive server-side operator scope and query any address needed for deposit monitoring, reconciliation, or compliance.

GET/v1/search?string_id=0x...&q=...Wallet-scoped semantic knot search
GET/v1/history/{wallet}?from=&to=&limit=&cursor=Wallet-scoped transaction history and cursor export
POST/v1/checkpointOperator-only index checkpoint anchor

Authentication and isolation

Use either Authorization: Bearer <Datachain ID token> or an existing X-API-Key: dcsk_.... Query parameters never grant authority. Missing or invalid credentials return 401. A valid wallet-scoped credential requesting an unlinked wallet returns 403 wallet_scope_violation. Wallet-scoped semantic search must include string_id; only an approved operator may omit it.

# wallet owner: the key owner must be linked to this exact wallet curl -sS \ -H "X-API-Key: dcsk_..." \ "https://semantic-agent.datachain.network/v1/history/0xYOUR_WALLET?from=0&to=4400000&limit=200" # semantic search, scoped to the authenticated wallet curl -sS \ -H "Authorization: Bearer $DATACHAIN_ID_TOKEN" \ "https://semantic-agent.datachain.network/v1/search?string_id=0xYOUR_WALLET&q=transfer&limit=50"

Full-history page stream

For a complete export, request a bounded block window, persist transactions[], then send the returned nextCursor on the next request. Stop when hasMore is false or nextCursor is null. The maximum page size is 200. This avoids unsafe full-history memory dumps and returns the same receipt-hydrated status, gas, fee, range, and cursor fields as /api/v1/accounts/{address}/transactions.

Operator onboarding

Exchange-wide access is not inferred from a company name, IP address, request body, or client-supplied role. Datachain Foundation verifies the operator wallet, adds that wallet to the runtime SEMANTIC_OPERATOR_WALLETS allowlist, and the operator authenticates with a Datachain ID token or DCScan API key owned by that wallet. Revoking the key or removing the wallet removes access without a binary deploy.

Transparency boundary: EVM transactions remain public through JSON-RPC and DCScan. This policy protects the enriched Semantic Agent aggregation surface and prevents anonymous cross-wallet semantic search.

Stats & Network

GET/statsCord anchors, transactions, events, entity knots, FAT price
GET/stats/charts/{chart_type}Time-series chart data
GET/statusService + RPC health
GET/dcfat/priceCanonical DC FAT price (DCSwap VWAP)
GET/marketsCEX + DEX FAT venues (Tokpie book + DCSwap)
GET/gas/oracleGas price oracle
GET/validatorsActive validator set
GET/ai-agentsCanonical AI testimony agents
GET/testimoniesAI agent testimonies
GET/ecosystem/directoryEcosystem Deployment Console public directory

Strings & Knots

Cord anchor knots (block-equivalents) and their contents.

GET/stringsList cord anchors (paginated)
GET/strings/latestMost recent anchors
GET/strings/{id}One anchor by index or hash
GET/search?q=…Address / tx / anchor / token search

Transactions

GET/transactionsList transactions (paginated)
GET/transactions/latestMost recent transactions
GET/transactions/{hash}Transaction by hash
GET/tokentxnsDCR-20 transfer events

Etherscan-compatible API

Blockscout / Etherscan-style query parameters on /api (no API key required). Same data as the REST endpoints below; preferred for exchange deposit monitors.

GET/api?module=account&action=txlist&address=…Normal tx list (Etherscan txlist)
GET/api?module=account&action=balance&address=…Native FAT balance (wei string)
curl -sS 'https://dcscan.io/api?module=account&action=txlist&address=0x029d65c2759099c6237ed3233736b5c25be31ed0&page=1&offset=100&sort=desc' curl -sS 'https://dcscan.io/api?module=account&action=balance&address=0x029d65c2759099c6237ed3233736b5c25be31ed0'

Accounts

Address lookup is type-aware. Externally owned wallets return native sends and receipts; smart contracts also include transactions discovered through indexed event logs; synthetic 32-byte entity ids resolve through /registry/entity/{id}. Use from, to, and limit for bounded exports. The response role identifies how the address participated (from, to, or log). coverage.complete is true only when historical backfill is complete and the index is within freshness_tolerance_blocks of the requested head. A proven empty history returns source: "addr-index-empty", never a fabricated row.

GET/accounts/{address}Balance, nonce, code, labels
GET/accounts/{address}/transactions?from=&to=&limit=&cursor=Wallet or contract history, newest first
GET/accounts/{address}/tokensDCR-20 balances
GET/accounts/{address}/nftsERC-721 (DCNFT) holdings
GET/accounts/topTop accounts by balance

Tokens & NFTs

GET/tokensDCR-20 token list
GET/tokens/{address}Token details
GET/tokens/{address}/holdersHolder list (full-history index)
GET/tokens/{address}/transfersTransfer history
GET/nfts/{address}/tokensERC-721 tokenId inventory
GET/tanastok/assetsTanastok tokenized-asset registry

FAT Markets

Aggregated CEX and DEX feeds for native DC FAT on Datachain Rope (chain 271828, no token contract). Tokpie FAT/USDT is that native asset. BSC FATCAT is a different token and is rejected. Operator-added HTTPS feeds are allowlisted (tokpie.com, tokpie.io, dcswap.net) and probed before persist. Order-book mid is not 24h volume and does not replace /dcfat/price (WFAT = FAT).

GET/marketsAll venues + CEX aggregate + DCSwap canonical
GET/markets/{id}One venue and capped order book
POST/marketsAdd venue (X-Admin-Token; probe-then-save)
DELETE/markets/{id}Remove or disable venue
# live Tokpie FAT/USDT book via dcscan curl -sS https://dcscan.io/api/v1/markets/tokpie-fat-usdt # add another allowlisted feed (admin) curl -sS -X POST https://dcscan.io/api/v1/markets \ -H 'content-type: application/json' \ -H 'X-Admin-Token: $PROJECTS_ADMIN_TOKEN' \ -d '{"venue":"Tokpie","pair":"FAT/USDT","feedUrl":"https://tokpie.com/api_order_book_v2/?market=FAT@USDT&depth=0","venueKind":"cex"}'

Registry (Quipu Canon v1.2)

Per-entity strings across all kinds: wallet, contract, asset, did, organization, application, ecosystem, partner, cord.

GET/registry/statsPer-kind counts + invariant
GET/registry/strings?kind=…Paginated, kind-filtered strings
GET/registry/labels?kind=…Entity label map (1,626+ entities)
GET/registry/manifestFull entity manifest mirror

JSON-RPC Proxy

Same-origin proxy to the rope-node RPC - accepts every rope_* and eth_* method, so browser apps avoid a CORS preflight to erpc.datachain.network.

POST/api/rpcJSON-RPC body forwarded verbatim
curl -s -X POST https://dcscan.io/api/rpc \ -H "Content-Type: application/json" \ -d '{"jsonrpc":"2.0","id":1,"method":"rope_globalStats","params":[]}'