curl --request GET \
--url https://api.gemrate.com/v1/certs/{grader}/{cert} \
--header 'x-api-key: <api-key>'import requests
url = "https://api.gemrate.com/v1/certs/{grader}/{cert}"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://api.gemrate.com/v1/certs/{grader}/{cert}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.gemrate.com/v1/certs/{grader}/{cert}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.gemrate.com/v1/certs/{grader}/{cert}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.gemrate.com/v1/certs/{grader}/{cert}")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.gemrate.com/v1/certs/{grader}/{cert}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"data": {
"description": "2011 Topps Update Mike Trout Diamond Anniversary US175",
"universal_gemrate_id": "d0719f0bc7f933c389832d01668ef5026dee09a6",
"gemrate_id": "d0719f0bc7f933c389832d01668ef5026dee09a6",
"is_universal_match": true,
"gemrate_url": "https://gemrate.com/card/d0719f0bc7f933c389832d01668ef5026dee09a6",
"grader": "psa",
"grader_data": {
"cert": "69437824",
"grade": "psa_10",
"grade_label": "10",
"set_url": "https://www.psacard.com/pop/baseball-cards/2011/topps-update/100690",
"population_context": {
"grade_population": 366,
"population_higher": 0,
"total_population": 774,
"gem_total": 366,
"gem_rate": 0.472868
},
"population_context_auto_split": {
"auto": {
"grade_population": 8,
"population_higher": 0,
"total_population": 27,
"grade_qualifier_population": 0
},
"non_auto": {
"grade_population": 358,
"population_higher": 0,
"total_population": 747,
"grade_qualifier_population": 0
}
},
"spec_id": "1816253",
"qualifier_type": null,
"has_auto_grade": false,
"auto_grade_label": null,
"cert_retrieval_month": "2026-07"
}
},
"meta": {
"request_id": "local"
}
}Cert lookup
Returns the details of a single graded card identified by its grading company and cert number. The response includes the gemrate_id of the card for reference within the GemRate system.
Shared identity fields (description, gemrate_id, universal_gemrate_id, is_universal_match, gemrate_url, grader) sit at the top level; everything specific to the grading company is nested under grader_data — always cert, grade, grade_label, set_url, has_auto_grade, auto_grade_label, population_context and cert_retrieval_month (the YYYY-MM month which the card data was last retrieved), plus grader-specific fields.
Grader-specific fields (inside grader_data). These appear only for the graders that supply them; treat a missing field as “not applicable to this grader”:
-
PSA
-
spec_id: PSA’s internal spec/catalog id for the card. -
population_context_auto_split: An autographed vs. non-autographed breakdown of the within-grader population counts, sitting besidepopulation_contextingrader_data. Present only on PSA certs and always included (no?auto_split=trueflag — that flag gates the separate, differently-shapedauto_spliton the population endpoints).
-
-
Beckett
subgrades: An object with Beckett’s four subgrades if present.
Non-standard certs. In some cases a cert cannot be associated with a card in our system — most commonly Beckett BCCG — so gemrate_id/universal_gemrate_id come back null and grade/population_context may be null.
Lean by default. Use the population or image endpoints to get those sub-resources.
curl --request GET \
--url https://api.gemrate.com/v1/certs/{grader}/{cert} \
--header 'x-api-key: <api-key>'import requests
url = "https://api.gemrate.com/v1/certs/{grader}/{cert}"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://api.gemrate.com/v1/certs/{grader}/{cert}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.gemrate.com/v1/certs/{grader}/{cert}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.gemrate.com/v1/certs/{grader}/{cert}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.gemrate.com/v1/certs/{grader}/{cert}")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.gemrate.com/v1/certs/{grader}/{cert}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"data": {
"description": "2011 Topps Update Mike Trout Diamond Anniversary US175",
"universal_gemrate_id": "d0719f0bc7f933c389832d01668ef5026dee09a6",
"gemrate_id": "d0719f0bc7f933c389832d01668ef5026dee09a6",
"is_universal_match": true,
"gemrate_url": "https://gemrate.com/card/d0719f0bc7f933c389832d01668ef5026dee09a6",
"grader": "psa",
"grader_data": {
"cert": "69437824",
"grade": "psa_10",
"grade_label": "10",
"set_url": "https://www.psacard.com/pop/baseball-cards/2011/topps-update/100690",
"population_context": {
"grade_population": 366,
"population_higher": 0,
"total_population": 774,
"gem_total": 366,
"gem_rate": 0.472868
},
"population_context_auto_split": {
"auto": {
"grade_population": 8,
"population_higher": 0,
"total_population": 27,
"grade_qualifier_population": 0
},
"non_auto": {
"grade_population": 358,
"population_higher": 0,
"total_population": 747,
"grade_qualifier_population": 0
}
},
"spec_id": "1816253",
"qualifier_type": null,
"has_auto_grade": false,
"auto_grade_label": null,
"cert_retrieval_month": "2026-07"
}
},
"meta": {
"request_id": "local"
}
}Authorizations
Path Parameters
The grading company.
psa, beckett, sgc, cgc "psa"
The cert number printed on the slab.
"47178561"
Query Parameters
When true, adds a parsed_description object that breaks the card's description into its catalog components for each grader (category, year, set_name, name, card_number, parallel, subset). Must be true or false; any other value returns 400 invalid_parameter.
Set to true to look up a standalone PSA/DNA autograph-authentication cert — a signed item (photo, ball, cut signature, ungraded card) that PSA authenticated for the signature only and that has no card grade. These records live in PSA's autograph-authentication database, not the card-grading one. Graded autograph cards do not need this flag — they return on the normal lookup with their grade in grader_data. PSA-only; ignores the path grader. Must be true or false; any other value returns 400 invalid_parameter.
Response
The cert's details, including the card's GemRate ID.
A single graded copy (a "cert") — lean by design. Shared identity fields sit at the top level; everything specific to the grading company that graded this copy is nested under grader_data. Population is NOT duplicated here; fetch it from GET /v1/certs/{grader}/{cert}/population.
Show child attributes
Show child attributes
Metadata attached to every response.
Show child attributes
Show child attributes