GemRate API

How many exist, at every grade, at every grader

The GemRate API returns gemrate.com's universal population report as JSON: for any sports or trading card it says how many copies PSA, Beckett (BGS), SGC and CGC have graded, at every grade.

endpoints
13
credits per call
2–5

2 credits per call≈ $2/1,000 calls1,000 free credits, no card

POST/gemrate/v1/search200
  1. Charizard-Holo
    description
    1999 Pokemon Game Chari…
    year
    1999
    set_name
    Pokemon Game
  2. Charizard-Holo
    description
    2021 Pokemon Celebratio…
    year
    2021
    set_name
    Pokemon Celebrations Cl…
  3. Charizard-Holo
    year
    2021
    set_name
    Pokemon Japanese Promo…
Real result, captured Nov 8, 20263 of 10
Try it live

Run the call yourself, on the real endpoint

Change a parameter and press Try it. The response on the right is what your code will receive.

GemRate API

3 of 13 endpoints, ready to run

View docs ↗

One card's population at PSA, BGS, SGC and CGC: every grade, gems and gem rate per grader, the combined total and the percent of copies graded higher.

3 credits0 required · 2 optional
POST/gemrate/v1/card
idle
// Press "Try it" and this pane shows exactly what the
// live site returned this second — including an empty
// result, if that is the truth. No key, no account.

Try every endpoint in the playground

Endpoints

What GemRate endpoints does ReefAPI ship?

13 live read endpoints. Read-only data API: no writes, no account actions, no dashboard access on the target site.

13 endpoints

search

2 cr

Find graded cards across PSA, BGS, SGC and CGC by free text (year, set, player or character,…

required
query
optional
page

card

3 cr

One card's full population report across PSA, Beckett, SGC and CGC.

required
—
optional
gemrate_id, query

card_history

4 cr

How a card's graded population has grown.

required
—
optional
gemrate_id, query, grader, year, category, set_name, name, card_number, parallel

set_pop

4 cr

A set's population report from one grader (PSA, BGS, SGC or CGC).

required
year, category, set_name
optional
grader, name, sort, limit, page, min_total

sets

2 cr

Every set a grader has graded for one year and category, with total graded, gems and gem rate…

required
year, category
optional
grader, query, sort, limit, page, min_total

set_history

2 cr

A set's grading history.

required
year, category, set_name
optional
grader, days

top_cards

2 cr

The most graded cards of all time at PSA, BGS, SGC or CGC, overall or in one category.

required
—
optional
grader, category, limit

player

5 cr

Every graded card of one athlete or character at one grader (a full checklist with population).

required
player
optional
grader, category, year, set_name, sort, limit, page, min_total

universal_sets

3 cr

GemRate's Universal Pop Report sets (cards matched across PSA, BGS, SGC and CGC).

required
—
optional
category, year, query, limit, page

universal_set

3 cr

One Universal Pop Report set.

required
—
optional
set_id, year, set_name, name, sort, limit, page, min_total

set_search

2 cr

Find PSA sets by name across every year and category (e.g.

required
query
optional
—

iconic_cards

3 cr

GemRate's Iconic Tracker.

required
—
optional
category, name, sort, limit, page

grading_volume

3 cr

How many cards are being graded.

required
—
optional
segment

Every parameter, every allowed value →

Missing a GemRate endpoint, or need a source we don't have yet?Contact us real people · same-day reply.
How it works

How the GemRate API works

GemRate is a normal ReefAPI surface — the same four rules that hold for every other engine on the key.

01
Authenticate
x-api-key header

No OAuth app, no request signing, no per-site account. One key covers all 632 engines.

02
Call
POST /gemrate/v1/…

Every route is a POST with a JSON body. Parameters are validated against the published schema before anything is charged.

03
Pay
2 or 3 or 4 or 5 credits per call

Credits, not seats. Failed and blocked calls are never charged, and nothing is cached: every call reads the source live.

04
Read
{ ok, data, meta, error }

One envelope everywhere. meta carries latency_ms, record_count and the endpoint that answered.

Recipe

PSA 10 scarcity for a card, in two calls

From a card name to its PSA 10 population and how fast new 10s are appearing.

01card
POST/gemrate/v1/card
{"query": "1999 Pokemon Base Charizard 4"}

by_grader → psa → grades: the PSA 10 count, gem rate, and the same for BGS, SGC, CGC.

02card_history
POST/gemrate/v1/card_history
{"gemrate_id": "<from card>", "grader": "psa"}

52 weekly totals, graded past month, 30-day gem rate.

Today's population at every grade and how fast it is growing.

request
curl -X POST https://api.reefapi.com/gemrate/v1/card \
  -H "x-api-key: $REEF_KEY" \
  -H "content-type: application/json" \
  -d '{"gemrate_id":"ffb8699bb7f435eff4e9761f8e29358e351d777e"}'
response envelope
{
  "ok": true,
  "data": { … },
  "meta": {
    "api": "gemrate",
    "endpoint": "card",
    "mode": "live",
    "latency_ms": …,
    "record_count": …
  },
  "error": null
}
Fields

"Gem" is not the same grade at every grader

Gem counts and gem rates are the ones GemRate publishes. Each grade row in the API says is_gem and which universal grade it sits on, so populations from different graders can be added up correctly. Example: 1999 Pokemon Base Set Charizard #4, measured 2026-11-08 (134,949 copies graded, 1,043 gems, 0.77 %).

GraderGrades counted as gemCharizard #4 totalgemsgem rate
PSA10108,8104900.45 %
Beckett (BGS)9.5, 10 Pristine, 10 Black Label9,1622492.72 %
CGC10, 10 Pristine, 10 Perfect15,0632981.98 %
SGC10, 10 Pristine1,91460.31 %

On the universal scale a BGS 9.5 counts as Gem Mint, BGS 10 Pristine as Pristine and Black Label as Perfect; SGC and CGC 9.5 are Mint+. PSA totals include qualified grades (OC, MK and the like), which card lists separately. Counts move every day - each grader row carries last_population_change.

Coverage

What GemRate publishes, and what it does not

gemrate.com only — US-based, PSA, BGS, SGC and CGC. Measured 2026-11-08: 39 of 40 live cases across 13 actions (the one miss was our own check, the site's set search also returns sealed packs), and 14 cards compared with GemRate's own pages. Some of these lines go against us.

Population

Every grade per grader, with GemRate's combined scale. 14 of 14 cards matched the card's own page and all 53 grader rows we compared were within 0.5%.

History

BGS and SGC weekly history for sports sets. PSA card history is 52 weekly totals with no dates and no split by grade.

Against us: search

The top 50 matches per query.

Against us: first call

The first call after a quiet period can take up to a minute, and may answer with a retryable error that is not charged.

Not published

CGC history and certificate lookup.

Use cases

What people build with GemRate

The jobs this data is most often used for.

13

endpoints

2/3/4/5

credits per call

01

Price a graded card: how scarce is a PSA 10 or a BGS 9.5 next to the copies sold

02

Decide whether to grade: a card's gem rate tells how often submissions come back a 10

03

Low-pop hunting: sort a set by population or gem rate to find the hardest cards

04

Watch supply: weekly population growth of a card or a set before buying

Pricing

What GemRate data costs

The cheapest call here is 2 credits, so $15/mo (Pro) buys 5,000 of them — $1.50 per 1,000 credits. Credits roll over and never expire, and failed or blocked calls are not charged.

Full pricing →
$0.67–$1.50 / 1,000 credits
  • 1,000 free credits on signup, no card
  • One key, all 632 APIs, one credit pool
  • Failed and blocked calls are never charged
  • Credits roll over and never expire
no credit card1,000 free credits · instant API key · pay by card or crypto
Quickstart

Call it in two lines

Sign up, get 1,000 credits and one key that works on every engine. Then this is the whole protocol.

curl
curl -X POST https://api.reefapi.com/gemrate/v1/card \
  -H "x-api-key: $REEF_KEY" \
  -H "content-type: application/json" \
  -d '{"gemrate_id":"ffb8699bb7f435eff4e9761f8e29358e351d777e"}'
python
import os
import requests

REEF_KEY = os.environ["REEF_KEY"]

r = requests.post(
    "https://api.reefapi.com/gemrate/v1/card",
    headers={"x-api-key": REEF_KEY},
    json={
        "gemrate_id": "ffb8699bb7f435eff4e9761f8e29358e351d777e"
    },
    timeout=90,
)
print(r.json()["data"])
FAQ

Have a question? We got answers.

The questions people actually ask before wiring up GemRate.

How many PSA 10s exist of a card?▾

card returns it: by_grader has one row per grader with the count at every grade, so the PSA row's grade 10 is the PSA 10 population (490 for the 1999 Base Set Charizard #4 on 2026-11-08). Find the card with search, or pass query to card directly and the best match is used and reported.

Is this the same number as PSA's own pop report?▾

It is GemRate's copy of each grader's published population, refreshed daily; data_last_updated and last_population_change say when. PSA's own report now requires a sign-in, GemRate's does not.

Can I get the population for a whole set?▾

Yes. set_pop takes the grader, year, category and set name and returns every card and parallel in the set with total graded, gems, gem rate and the count at each grade, sortable by population or gem rate. sets lists the set names a grader uses for a year, and every card's by_grader rows carry the grader's own set name.

Does it show how a population grows over time?▾

card_history returns weekly BGS and SGC history for the last year with every grade, and for PSA 52 weekly totals plus graded in the past month and prior month and the 30-day gem rate. set_history returns a set's total graded and gems every day it changed (PSA back to 2021). GemRate publishes no CGC history.

Which cards are covered?▾

Every card PSA, BGS, SGC or CGC has graded that GemRate tracks: baseball, basketball, football, hockey, soccer, golf, boxing and MMA, non-sport, and trading card games such as Pokemon, Magic: The Gathering, Yu-Gi-Oh! and One Piece. GemRate has counted over 120 million graded items.

Can I look up a cert number?▾

GemRate has no cert lookup, so this API does not offer one. PSA set rows and athlete rows include a recent cert number for the card. For a PSA cert, use the Card Ladder API's cert lookup.

What is the GemRate API?▾

GemRate API is a ReefAPI endpoint group for graded card population across psa, bgs, sgc and cgc: every grade, gem rate, set and athlete pop reports, as json. It returns live JSON through POST requests under /gemrate/v1.

Is the GemRate API free to try?▾

Yes. ReefAPI starts with 1,000 free credits, no card required. GemRate calls use the same shared credit balance as every other ReefAPI engine.

Do I need a GemRate login or account?▾

No login to GemRate is needed for the API response. You call ReefAPI with your x-api-key header, and the playground can run live examples before you create a production key.

How fresh is the GemRate data?▾

The page example is captured from a live search call, and production requests fetch live data through ReefAPI rather than a static sample.

How many credits does the GemRate API use?▾

GemRate actions currently cost 2-5 credits per successful call. Failed or blocked calls are free. All APIs draw from one credit pool.

Can I call GemRate from an AI assistant or MCP client?▾

Yes. Connect ReefAPI once through MCP and your assistant can call gemrate actions with the same key, credit pool and JSON envelope used by normal REST requests.

Is the GemRate API a GemRate scraper?▾

It is the managed alternative to a DIY GemRate scraper. Instead of building and maintaining your own scraper — proxies, headless browsers, captcha and constant breakage — you call one ReefAPI endpoint and get the same graded card population across psa, bgs, sgc and cgc: every grade, gem rate, set and athlete pop reports, as json back as clean JSON.

Why does my GemRate scraper keep getting blocked?▾

Most GemRate scrapers break on anti-bot defenses, rate limits and IP bans that need rotating residential proxies and browser fingerprinting to clear. ReefAPI handles all of that for you — no proxies, no captchas, no maintenance — and returns live JSON. Blocked calls are free.

Contact

Need something this API does not do?

Name the endpoint, the field, or a source we do not carry yet. We ship new APIs every week and you would be first to get the key. Real people read every message and reply the same day.

0/4000

No account needed · we reply from [email protected]

Try it on your own data before you pay anything

The call above is the real endpoint, not a recording. A free key gives you 1,000 credits, the other 631 APIs, and the same envelope everywhere.

Endpoints, parameters and credit costs on this page are read from the live catalog and cannot drift from what the API accepts. Field notes were captured on 2026-11-08.