BASIS

API

Free endpoints for the claim database; premium lookups paid per-call in USDC over x402 — no account, no API key. Current base URL is https://basis.watch/api; api.basis.watch is reserved as the future dedicated API hostname and will redirect-compatibly mirror these routes.

Free endpoints

GET/api/claimsfree

All claims. Filter with ?project=<slug> or ?status=<status>.

bash
curl -s "https://basis.watch/api/claims?project=venice&status=disputed"
GET/api/projectsfree

All projects with dossiers and Claim Reliability Index scores.

bash
curl -s "https://basis.watch/api/projects"
GET/api/reportsfree

Report metadata: title, date, summary, dataset/report hashes, onchain anchor.

bash
curl -s "https://basis.watch/api/reports"
GET/api/seller/{address}/adjustedfree

Sybil-adjusted seller metrics for an x402 seller address. Coverage is rolling out seller-by-seller; uncovered addresses return coverage:'none' — Basis never fabricates metrics.

bash
curl -s "https://basis.watch/api/seller/0x0000000000000000000000000000000000000000/adjusted"

Premium (x402)

GET/api/x402/claimsx402 · $0.05 USDC

Premium claim lookups: full evidence trails, methodology notes, machine-readable source grading, and change history. Returns HTTP 402 with payment requirements; retry with an X-PAYMENT header constructed by any x402 client (x402-fetch, Coinbase Payments MCP, etc.). Price: $0.05 USDC per call.

bash
# 1) Unpaid request returns 402 + accepts[]:
curl -si "https://basis.watch/api/x402/claims?project=gitlawb"

# 2) With an x402 client (TypeScript):
import { wrapFetchWithPayment } from "x402-fetch";
const paidFetch = wrapFetchWithPayment(fetch, walletClient);
const res = await paidFetch(
  "https://basis.watch/api/x402/claims?project=gitlawb",
);

Response conventions

Building an agent? The same data is available over MCP — see MCP documentation. Questions: support@basis.watch