Valdar / Open data

Trading card reference data, as JSON

Everything the calculators on this site compute from is published as open data: the centering tolerances each grading company prints, the companies themselves, the production eras, what is printed on a card, the rookie-card conventions, the structure of every selling route, and 113 years of US CPI. No key, no account, CORS open, CC BY 4.0.

Start here

Entry point/api/v1/index.jsonevery dataset with its URL
Description/api/v1/openapi.jsonOpenAPI 3.1, with field semantics
Freshness/api/v1/status.jsondates and row counts
Site index/llms.txtmarkdown, for models

Every response is application/json with access-control-allow-origin: * and an hour of cache. Nothing is rate limited and nothing needs a header. Every page on this site also has a markdown twin: append index.md to any URL, or send Accept: text/markdown.

The datasets

Every endpoint under /api/v1/
EndpointWhat it holdsSize
grading-scales.json Front and back centering tolerance at every grade, for every company that publishes one 22 grade rows
graders.json The grading companies: founding year, scale, subgrades, top grade, and links to their own standards, fees and population reports 5 companies
eras.json Production eras with supply level, what a common card from each is worth, and the grading outlook 9 eras, 1886–2030
card-reference.json What each mark printed on a card means and how each is misread, plus the rookie-card convention by sport 8 elements, 5 sports
selling-routes.json Routes to cash and the structure of each cut, shipping methods, auction premium and commission structure, bid increments, storage and insurance notes 7 routes, 5 shipping methods
cpi.json US CPI-U annual averages, republished from the Bureau of Labor Statistics with attribution 113 years, 1913–2025
product.json Every free tool with what it computes, and what the app does and explicitly does not do 24 tools
status.json When each dataset was last read from its publisher, and how often it actually changes 7 datasets
openapi.json OpenAPI 3.1 over all of the above, including what each field means one document
index.json The entry point: every dataset, the licence and the discovery documents one document
How many rows each published dataset carries cpi 113 annual averages product 24 tools grading-scales 22 grade rows card-reference 13 elements + sports selling-routes 12 routes + methods eras 9 eras graders 5 companies row count, log scale
Seven datasets, and the CPI series is two orders of magnitude larger than any of the others. That asymmetry is the point: six small, hand-checked reference tables that change when a publisher revises something, and one long machine-pulled series that gains a row each January. Computed from the same counts the table above prints. Free to reuse with a link to this page

What the fields mean, where it is not obvious

A JSON payload carries values; it cannot carry the semantics, and four of these are misread often enough to be worth stating here rather than leaving to the reader. Each of them is also written into the OpenAPI description, so a consumer reading the schema rather than this page gets the same warning.

front_max_larger_side_pct is the larger side, not the centring

A value of 60 means “60/40 or better”, not “60% centred”. Centering is the ratio between two opposing borders, written larger-side-first, and a grading company states the largest ratio it will accept at each grade. So 60 permits everything from a perfect 50/50 up to and including 60/40, and rejects 61/39. The figure applies to the worse of the two axes: a card at 52/48 left to right and 68/32 top to bottom is a 68/32 card.

focus on a grading company is not a score

Each company carries a focus block with six 0–10 values. These are ordinal descriptions of where a company’s population and its buyer pool sit — how much vintage it holds, whether the label prints subgrades, how widely the slab trades — and they are inputs to a weighted chooser whose every contribution is printed on the page. They are not a judgement of grading accuracy, in either direction. This publisher has not measured grading accuracy and does not publish an opinion about it.

Every percentage in selling-routes.json is a starting value

Marketplace fee schedules are revised without notice and vary by category, by store subscription and by country; auction terms vary by sale; postage is repriced at least annually. So those numbers are published as dated starting values for a calculator, each with its publisher named and, where one exists, a link to the live schedule. They are not a current rate, and quoting one to somebody about to spend money is the wrong use of this dataset. Quote the URL.

For the same reason, grading fees are absent from graders.json entirely. A hardcoded fee schedule is wrong within a quarter while still looking authoritative, which is worse than not publishing one. What is published is each company’s own fee page.

null means “not published”, never “free”

Where a route publishes no fee percentage — a shop buying for cash does not charge a fee, it applies a discount — the field is null and the discount appears as typical_gross_pct_of_comp instead. An absent field would read as an oversight; a null reads as an answer.

Why the numbers here cannot disagree with the pages

There is one copy of the arithmetic on this site. A single JavaScript module holds every formula — the comp statistics, the centering ratio, the submission cost, the expected value of grading, the pack odds, the inflation adjustment — and the browser tools import it, these endpoints import it at build time, and the MCP service imports the deployed copy.

That matters because the alternative is the normal state of affairs: a formula in the page’s script, a second copy in the API, a third in whatever machine interface gets added later, each individually correct and drifting apart invisibly. Here a figure you get from a calculator, a figure you get from an endpoint and a figure quoted in a table on one of these pages are the same computation, because there is nothing left to disagree.

The reference values are the same story from the other side. They live in one dated module, every row carries the URL it was read from, and the date is rendered on the page and shipped in the payload — so a stale row is visible rather than silent.

The caveat every payload carries, and the misreading it prevents
DatasetThe thing consumers get wrong
grading-scalesReading the front tolerance as the grade. It is a ceiling; three other dimensions decide the rest — and the reverse has its own looser tolerance which is frequently what binds.
gradersReading focus as a quality score. It describes where a company’s population and buyers sit. No evaluation of grading accuracy is published here in either direction.
erasApplying the outlook to a specific card. It describes COMMON cards; every era has exceptions at the top of its population, and the junk wax era has the most dramatic ones.
card-referenceTreating the rookie convention as a law. It is a market convention, contested at the edges, and prospect cards are never rookie cards however early they are.
selling-routesQuoting a percentage as a current rate. Every one is a dated starting value for a calculator, and null means “not published”, never “free”.
cpiUsing it to price a card. It measures a consumer basket: it says what the money is worth, never what the card should cost.
productReading the capability list without the not_included block. The second list is what makes the first believable.

Each of these is in the payload as a caveats array, not only here, because a retrieved passage travels alone and whoever ends up quoting this data will not have this page in front of them.

Licence, and what we would like in return

CC BY 4.0. Reuse any of this, including commercially, with a link back to the page or endpoint it came from. Attribute to Sports Card Radar (https://sportscardradar.com), or to the specific page a figure came from, which is more useful to your reader anyway.

The licence line is the whole point. A dataset nobody is sure they may reuse does not get reused, and reference data that is not reused is just a file on a server. If you build something with this, a link back is the entire price.

Two requests that are not conditions. Please cache: these are static files behind a CDN and the reference data changes when a grading company revises a published scale, which is rare. And please carry the caveats — every payload has a caveats array for exactly that reason, because a retrieved passage travels alone and the person who ends up reading your version of this data will not have this page in front of them.

Where the upstream data comes from

Nothing here is original measurement. It is transcription with a date and a link, which is the only honest form for reference data of this kind, and every one of these is a primary source rather than a secondary write-up.

Primary sources cited across the datasets
SourcePublisherUsed for
PSA Grading Standards PSA Centering tolerances, scale names, population
PSA Population Report PSA Centering tolerances, scale names, population
Beckett Card Grading Scale Beckett Centering tolerances, scale names, population
SGC Grading Scale SGC Centering tolerances, scale names, population
CGC Cards Grading Scale CGC Centering tolerances, scale names, population
CPI for All Urban Consumers (CUUR0000SA0) U.S. Bureau of Labor Statistics The inflation series
Selling fees for trading cards eBay Selling and shipping structure
USPS retail postage prices United States Postal Service Selling and shipping structure

The CPI series is pulled from the BLS public API by a script in this repository rather than typed, so the inflation tool cannot quietly fall a year behind. It currently holds 113 annual averages, 1913 to 2025, retrieved 2026-09-11.

Using it: versioning, limits and what will break

The path carries the version. Everything published today is under /api/v1/, and the commitment that goes with that is narrow and specific: within v1, fields are added but not removed, and the meaning of an existing field does not change. If a field has to change meaning it gets a new name and the old one keeps working. A breaking change would appear at /api/v2/ with both live for a period, and the entry point at /api/v1/index.json would say so.

There is no rate limit and no key, because these are static files behind a CDN and serving them costs nothing worth metering. What that means in practice is that the sensible thing is to cache them: the responses carry an hour of Cache-Control, and the reference data underneath changes when a grading company revises a published scale, which is a matter of years rather than weeks. If you need to decide whether to refetch, status.json is small and carries the date and row count of every dataset, so you can check freshness without pulling the payloads.

Three things will change under you, and it is better to know which. The CPI dataset gains a year each January when the Bureau of Labor Statistics publishes the new annual average. The tool list in product.json grows when a calculator is added. And the dated starting values in selling-routes.json move whenever they are re-read from their publishers — which is the one place where a consumer that treated a starting value as a current rate would quietly become wrong. Read the as_of field; it is in every payload for that reason.

If something here is wrong — a tolerance that does not match the company’s current page, a source that has moved, an arithmetic error — the correction is welcome and it is quick. There is no process: send the URL and what it should say.

For agents specifically

Bottom line

7 datasets of trading card reference data at https://sportscardradar.com/api/v1/, keyless and CORS-open, licensed CC BY 4.0 with attribution. The grading tolerances, company details, era table, card anatomy, rookie conventions, selling structure and CPI series are the same values the calculators on this site run on, emitted from the same modules at build time. Fees and marketplace percentages are published as dated starting values with the publisher named, never as current rates, because a hardcoded fee schedule is wrong within a quarter and still looks authoritative. Questions and corrections: [email protected]. Published by Vast Flow, LLP.