API
Appraise
Raw and graded card appraisals for $0.02 a call, paid in USDC on Arc, Base, Polygon, Solana. One call, every price a card has — each figure with its source, its sample size and its dates.
Call it
GET https://www.retcg.xyz/api/appraise/pokemon:swsh7-215
→ 402 Payment Required · PAYMENT-REQUIRED: base64 { accepts: [Arc, Base, Polygon, Solana] }
→ pay $0.02 in USDC from whichever chain you hold it on, repeat the request
→ 200 · rows, set, projections, pnl, breakeven, attestThe id is a pokemontcg.io card id (sv3pt5-199 is 151 Charizard ex). Any x402 client pays it; with @x402/fetch it is one wrapped fetch:
import { wrapFetchWithPaymentFromConfig } from "@x402/fetch";
import { ExactEvmScheme } from "@x402/evm";
import { privateKeyToAccount } from "viem/accounts";
const pay = wrapFetchWithPaymentFromConfig(fetch, {
schemes: [{ network: "eip155:8453", client: new ExactEvmScheme(privateKeyToAccount(KEY)) }],
});
const r = await pay("https://www.retcg.xyz/api/appraise/pokemon:swsh7-215?denoms=USD,EUR,SOL");
const { rows, set, projections, pnl, attest } = await r.json();Solana pays with @x402/svm; Arc pays from a Circle Gateway balance with @circle-fin/x402-batching. The unpaid 402 already carries the set, its momentum and the raw levels, free — and /api/appraise/sets is every set's phase, momentum and heat, free.
What comes back
A real answer, paid for on 20 September 2026 — Umbreon VMAX, Evolving Skies 215/203:
cond USD EUR SOL basis
raw 1,928.88 1,289.51 17.59 observed · ebay sold · n 5 · 15→19 Sep
PSA 10 4,500.00 3,918.99 41.05 observed · ebay sold · n 5 · 15→20 Sep
BGS 9.5 2,575.00 2,242.53 23.49 observed · ebay sold · n 2 · 19 Sep
set Evolving Skies · out of print · 1,850 days · shelved by Fusion Strike
momentum −1.4% / 30 d · heat 0.37 · drift (out of print) −0.38% / 30 d, n 58
raw@365 1,841.76 → eBay net 1,596.18 (−17.2%) raw → PSA 10: +$80 grading → net 3,645.88 (+89.0%)
attest EIP-712 · signer 0xb0Fd9c696CE8B93Aee2e9f63A43A28383A5fa947- rows — every condition (raw, PSA 1–10, BGS/CGC/SGC with halves) in USD, EUR, USDC, EURC, GBP, JPY, ETH, SOL, BTC. USD and EUR are their own markets (eBay sold, TCGplayer, Cardmarket); the rest are converted and say so. A condition nobody has sold is priced from the set's grade ladder, marked ladder, or left null. No basis, no number.
- set — the phase from the release calendar (launch, in print, shelved, out of print, vintage), 30-day momentum against every other set, heat.
- drift · projections — what sets in each phase did last month, measured across 174 sets nightly, and the level compounded through the phases ahead at 30/90/180/365 days. An unmeasured phase on the path voids the projection rather than filling it.
- pnl · breakeven — what a sale nets after eBay, TCGplayer, Mercari or Cardmarket fees and postage, including raw → graded with the grading fee; break-even at the fee then ($25) and now ($80). ?paid= and ?on= make it your purchase.
- attest — an EIP-712 signature over the rows, so any chain can verify a figure with one ecrecover.
For agents and directories
- OpenAPI 3.1 with x-payment-info: /api/appraise/openapi.json
- x402 manifest: /.well-known/x402 (and the _x402.retcg.xyz TXT record)
- In words: /llms.txt
- Route template /api/appraise/:id · scheme exact · asset USDC · networks eip155:5042 · eip155:8453 · eip155:137 · solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp
Pokémon only for now. Vintage keywords can pool editions (a Base Set Charizard's raw pile mixes Unlimited with Shadowless); the answer flags the disagreement rather than hiding it. Questions: contact@retcg.xyz or the Discord.