x402 · USDC on Base or Solana

x402-research

Scholarly search over arXiv, Crossref, and Semantic Scholar. An agent sends a query, pays $0.002 in USDC, and gets a merged, de-duplicated, citation-ranked paper list back in the same response. Citation graphs and paste-ready bibliographies too. No API key, no account, no subscription.

git clone https://github.com/nirholas/x402-research
cd x402-research && npm install
npm run dev

Pricing

RoutePriceReturns
GET /search$0.002 Merged, de-duplicated, citation-ranked papers with authors, venue, DOI, abstract, and citation count, plus a per-source status block
GET /paper/:id$0.003 Full metadata, abstract, TL;DR, open-access PDF link, plus the top citing works and the reference list
POST /bibliography$0.005 Paste-ready BibTeX and/or APA 7 references, one entry per DOI
GET /, GET /health, GET /.well-known/x402 freeService info, liveness, discovery manifest

Every paid route returns the purchased artifact in the 200 response body.

Two rails, one price

The 402 challenge advertises both. Your client picks whichever it can sign.

USDC on Base

network base-sepolia · base on mainnet
0x40252CFDF8B20Ed757D61ff157719F33Ec332402

USDC on Solana

network solana · solana-devnet on devnet
WwwuGbqHrwF5RG89KhUbmRWEvjnRH9k5kVM5p7T3WwW

How a paid call works

1 · 402 2 · Sign 3 · Settle 4 · 200 Server quotes both rails Client signs Base or Solana Facilitator verifies on-chain Artifact in the body + receipt

Quickstart (agent side)

import { wrapFetchWithPayment, createSigner } from "x402-fetch";

const signer = await createSigner("base-sepolia", process.env.PRIVATE_KEY!);
const payFetch = wrapFetchWithPayment(fetch, signer);

const res = await payFetch(
  "http://localhost:4021/search?q=attention%20is%20all%20you%20need&limit=5"
);
const artifact = await res.json(); // purchased artifact, in-response

Links