aisearch

Web search that returns the raw results and an AI-synthesised answer with real, verifiable citations. Every [n] marker is generated from the search API's own source attribution — not written by the model — so a citation cannot be invented. Pay per call in USDC over x402. No account, no API key, no subscription.

x402 v2 USDC on Base no signup machine-payable citations verified by construction

Endpoints

POST /answer $0.008

One fact, fast. A direct factual answer in a short paragraph with citations — no report structure, no headings. For agents that just need to know a thing.

Fastest endpoint. Says “I could not find a reliable source” rather than guessing. Measured 3–6 s.

curl -s https://aisearch.x.c00l.site/answer \
  -H 'content-type: application/json' \
  -d '{"query":"What is the current Node.js LTS version?"}'

POST /search $0.02

The main endpoint. Searches the web, then returns a cited Markdown answer, the citation list, the raw result set, and suggested follow-up questions.

depth: quick (~5 s) or standard (default, 25–40 s; also searches for counter-evidence).

curl -s https://aisearch.x.c00l.site/search \
  -H 'content-type: application/json' \
  -d '{"query":"state of WebGPU browser support","depth":"standard","maxResults":10,"recency":"month"}'

POST /compare $0.03

Researched side-by-side comparison: a verdict, a Markdown comparison table, the differences that actually matter, and the same data again as a structured JSON matrix with a per-cell verified flag.

Unverifiable cells come back as not found rather than being filled with a guess. Measured 55–80 s.

curl -s https://aisearch.x.c00l.site/compare \
  -H 'content-type: application/json' \
  -d '{"subjects":["Cloudflare Workers","AWS Lambda","Deno Deploy"],"criteria":["cold start","pricing model","runtime limits"]}'

POST /research $0.25

The premium product. A genuinely agentic multi-step investigation: plans sub-questions, searches each, opens and reads the promising pages, hunts its own gaps and counter-evidence, then writes a long structured report — executive summary, key findings, analysis, an evidence-quality table with a confidence rating, and what remains uncertain.

Uses extended thinking and a real tool-use loop with hard caps on turns, page reads, subrequests and wall clock. Measured 205–254 s; allow up to 360 s. Set your client timeout accordingly — Node's built-in fetch gives up at 300 s.

curl -s https://aisearch.x.c00l.site/research \
  -H 'content-type: application/json' \
  -d '{"query":"How production-ready is WebGPU in 2026, and what are the remaining blockers?","recency":"year"}'

Free routes

RouteReturns
GET /This page.
GET /openapi.jsonOpenAPI 3.1 spec of every route.
GET /health{"ok":true}

Why the citations are trustworthy

Most “AI search” APIs ask the model to write its own citations, which is exactly the task models are worst at. This service does not. The underlying search API attaches, to each span of generated prose, the search result that span came from, together with the quoted text. We take that attribution and render the numbered markers ourselves.

The consequences are concrete: every [n] in the answer resolves to a real retrieved URL; every entry in citations[] carries the source's own quote; and the model is explicitly forbidden from typing citation markers at all. It is also instructed to state plainly when sources disagree, when a claim comes from its own background knowledge rather than a source, and when it simply could not find the answer.

Paying

Any x402 client pays automatically — the first request returns 402 with a PAYMENT-REQUIRED header, your client signs a USDC transfer authorisation and retries. Settlement details come back in PAYMENT-RESPONSE.

npm i x402-fetch viem

import { wrapFetchWithPayment } from "x402-fetch";
const pay = wrapFetchWithPayment(fetch, account);

const r = await pay("https://aisearch.x.c00l.site/search", {
  method: "POST",
  headers: { "content-type": "application/json" },
  body: JSON.stringify({ query: "who won the 2026 world cup" }),
});
const { answer, citations, results } = await r.json();

Bad input is rejected with a 4xx and is never charged, and a failed model call returns 5xx so settlement never happens — you only pay for output you actually received.

What you get back

answer / report / comparisonMarkdown with inline [n] citations.
citations[]{n, url, title, quote, quotes[]} — the source's own words.
results[]Raw results: title, url, snippet, publishedAt.
usageReal input/output/thinking tokens and search counts.
warnings[]Told explicitly when output is degraded or ungrounded.
trace / pagesRead/research shows every query and page it opened.