x402 · Algorand · Base · Solana · USDC per call

Second Opinion

An independent adversarial agent tries to break your claim before you act on it. Pay a few cents per verdict — in USDC on any of 3 chains (Algorand · Base · Solana). No account, no API key, no subscription — just HTTP 402.

Why agents call this

Agents fail worst when they are most confident, and self-checking shares the same blind spots as the original reasoning. Second Opinion is a different model instance with fresh context, live web access, and one paid incentive: refute the claim if it can be refuted. Call it at the moment of irreversible commitment — before code, money, publication, or a promise:

Every verdict doubles as an audit receipt: independent check, timestamped, payment on-chain — something self-verification can never produce.

Endpoints & pricing

EndpointPriceWhat you get
POST /v1/verify/quick$0.03Reasoning-only check, no web research — the habit tier. Honest "needs research" escalation
POST /v1/verify$0.20One skeptic, live web research, structured verdict
POST /v1/verify/panel$0.75Three skeptics (evidence · logic · currency), majority verdict
POST /v1/verify/async$0.20Async variant: instant job id, poll free result_url. Required for Solana payers
POST /v1/verify/panel/async$0.75Async panel
GET /v1/schemafreeMachine-readable version of this page

Verdicts are refuted, supported, or inconclusive, each with calibrated confidence, findings, and the URLs actually consulted. Failed sync requests (5xx) are never settled, and failed async jobs retry free — you only pay for delivered verdicts.

Chains: pay on Algorand · Base · Solana — same price, same product. Algorand is the preferred rail (listed first in every 402). Solana payers must use the /async routes: Solana transactions expire in ~1 minute, so the async flow settles your payment in seconds and serves the verdict via the free result URL.

Call it (any x402 client)

import { wrapFetchWithPayment, x402Client } from "@x402-avm/fetch";
import { toClientAvmSigner, ALGORAND_MAINNET_CAIP2, NETWORK_TO_ALGOD } from "@x402-avm/avm";
import { ExactAvmScheme } from "@x402-avm/avm/exact/client";

// signer: your Algorand account (holds a little USDC on algorand mainnet)
const signer = toClientAvmSigner(process.env.PAYER_SK_B64);
// Pin the scheme to the network's algod node — an unconfigured wildcard
// registration silently builds testnet transactions and fails verification.
const client = new x402Client().register(
  ALGORAND_MAINNET_CAIP2,
  new ExactAvmScheme(signer, { algodUrl: NETWORK_TO_ALGOD[ALGORAND_MAINNET_CAIP2] }),
);
const payingFetch = wrapFetchWithPayment(fetch, client);

const res = await payingFetch("https://secondopinionx402.com/v1/verify", {
  method: "POST",
  headers: { "content-type": "application/json" },
  body: JSON.stringify({
    claim: "Library X v3 supports streaming responses natively",
    context: "About to migrate our retry logic to rely on this",
  }),
});
const verdict = await res.json();
if (verdict.verdict === "refuted") { /* stop and re-plan */ }

Or inspect the payment requirements yourself — request without payment and read the 402:

curl -s -X POST https://secondopinionx402.com/v1/verify \
  -H 'content-type: application/json' \
  -d '{"claim":"HTTP 402 was reserved in 1997 and first standardised for real use by x402"}'
# → HTTP 402 + JSON: accepts[], network, asset, payTo, amount — pay, then retry with X-PAYMENT header

Example verdict

{
  "id": "so_9f2c…",
  "mode": "single",
  "verdict": "refuted",
  "confidence": 0.93,
  "summary": "The claim conflates two products. v3 added streaming to the Pro tier only; the open-source core still buffers responses (changelog, issue #4812).",
  "findings": [
    { "point": "v3.0 changelog scopes streaming to Pro", "direction": "against_claim", "source_url": "https://…/changelog" }
  ],
  "citations": ["https://…/changelog", "https://…/issues/4812"],
  "engine": { "model": "claude-sonnet-4-5", "searched_web": true },
  "checked_at": "2026-07-21T12:00:00Z"
}

Honesty properties

No manufactured doubt. The skeptic is scored on calibration, not on finding problems. "Supported" after a real refutation attempt is the product working, not the product failing.

Citations are real. Only URLs actually consulted are returned. If web search was unavailable, searched_web:false is set and confidence drops.

Verification, not truth. Treat verdicts as strong evidence and check citations on anything load-bearing. The response says this too, every time.