Health check
Tiny liveness check for monitors.
okserviceNo paywall, no secret client key, no fake black box. If PFVI used it to price the index, the API should make it inspectable: chart tape, accepted sales, rejected sales, source counters, and calculation knobs.
Public GET + CORS enabledAll endpoints below are read-only and public. Responses are JSON. Public cache is short-lived, currently intended for live dashboards and third-party charting.
Tiny liveness check for monitors.
okserviceBest endpoint for a simple price widget or settlement display.
index metadatatimestampdenominationvalueUsdcmedianUsdcmeanUsdcconfidenceacceptedSalesCountrejectedSalesCountlatestAcceptedSalecomponentsBest endpoint for charts. Returns the public PFVI time series, ordered oldest to newest.
timestampvalueUsdcconfidenceacceptedSalesCountrejectedSalesCountEvery sale currently accepted into the PFVI calculation window.
txSigmintactionmarketplacetimestamppriceUsdccurrencybuyersellercardrawzScoreEvery sale seen but rejected from the current calculation, with the reason attached.
all sale fieldsaccepted=falserejectionReasonThe machine-readable knobs behind the current PFVI calculation.
formulasourceminGradegradeCompanyminPriceUsdwindowSalesoutlierStddevacceptedActionscurrencyCrawler/source summary, index identity, and current calculation components in one light payload.
generatedAtsourceindexcomponentsOperational counters for dashboards, crawlers, and watchdogs.
generatedAtlastWriteAthasCurrenthistoryCountacceptedSalesCountrejectedSalesCountsourceEverything public in one payload: current, full chart history, source summary, accepted sales, rejected sales, and latest methodology components.
generatedAtsourcecurrentcurrent.acceptedSalescurrent.rejectedSaleshistoryPointhistoryUse /api/pfvi/history for a clean time series, or /api/pfvi/dumpif you want the chart and the current sale corpus in one request.
fetch("https://pfviapi.tradeonliquid.xyz/api/pfvi/history")
.then((r) => r.json())
.then((points) => points.map((p) => ({
time: p.timestamp,
value: p.valueUsdc
})));Compare /sales against /rejected. Rejections include the reason so anyone can see which prints were excluded before settlement.
const [accepted, rejected] = await Promise.all([
fetch("https://pfviapi.tradeonliquid.xyz/api/pfvi/sales").then((r) => r.json()),
fetch("https://pfviapi.tradeonliquid.xyz/api/pfvi/rejected").then((r) => r.json())
]);/current{
"index": { "id": "PFVI", "ticker": "PFVI", "eligibility": "PSA 6+" },
"timestamp": "2026-06-10T12:10:37.179Z",
"denomination": "USDC",
"valueUsdc": 51.7372,
"medianUsdc": 46.8,
"meanUsdc": 60.3784,
"confidence": 82,
"acceptedSalesCount": 942,
"rejectedSalesCount": 1548,
"components": { "formula": "10% trimmed mean...", "source": "Collector Crypt card-activity API" }
}sale object{
"txSig": "36Qr9e...DUmMNtqv",
"mint": "8s8FGr...RH2RW",
"action": "Offer Accepted",
"marketplace": "COLLECTOR_CRYPT",
"timestamp": "2026-06-10T06:59:13.000Z",
"priceUsdc": 47.0988,
"currency": "USDC",
"buyer": "9qv5...mvaqJA",
"seller": "HkUN...rKQ8Y",
"accepted": true,
"rejectionReason": null,
"card": { "itemName": "2025 #109 N's Reshiram PSA 10...", "gradeNum": 10 },
"raw": { "source": "COLLECTOR_CRYPT", "transactionUrl": "https://solscan.io/tx/..." }
}