/api/v1/grading/certs/{provider}/{certNumber} read:catalog 1
creditLook up a slab using its grading provider and certificate number. The response separates the grader’s verified record from our catalog association and exact-grade pricing. An unresolved association returns card: null and gradedPrice: null; verified certificate metadata remains available.
Uses the existing API key and read:catalog scope. Costs 1 credit per successful request. Failed requests follow the standard credit-refund policy. Limit: 30 requests/minute per key, with 4 concurrent uncached certificate lookups per server instance; overload returns 429 rate_limited with Retry-After.
Lookup suppliers, price provenance and internal matching evidence are not exposed. The named grading company and its public certificate report link remain certificate metadata.
Cold lookups depend on the grading service and may take over 60 seconds during recovery. Use a client timeout that accommodates the server’s grading budget (150 seconds by default). Warm lookups avoid fetching the same verified provider record again.
Verified provider records are reused for up to 30 days (a grade does not change once issued; population counts can be that old). Overlapping requests for the same certificate share provider and matching work. Completed card/price responses are not cached; catalog identity is re-evaluated using the complete provider record; legacy cached card ids and base-printing stand-ins are not trusted. An image tiebreak must score every tied candidate before it can resolve the printing.
Close image rankings may use geometric image matching when all references are ready. Cold or inconclusive references leave the match unresolved. A missing card number requires a unique name within the verified set. Catalog images that explicitly reference another card are withheld.
A verified certificate describes the grader’s record; it does not authenticate a physical slab or prove that a photograph belongs to that certificate.
While a grader’s site cannot be reached, PSA and CGC certificates may still return a verified record with the grade, label type and the grader’s slab pictures, card fields null and match.reason certificate_names_no_card (verificationConfidence medium). Such a record is not reused: the next lookup asks the grader again and the full record replaces it. BGS and TAG return provider_unavailable as before.
Treat unresolved and null prices as missing evidence. Never hydrate a different card or a raw price to fill them. Unrecognized language or variety information can leave a valid certificate unresolved.
data.cardLadder is fetched alongside the catalog match and kept; a value is refreshed once it is a day old, and a certificate’s verified record is kept for good, so a repeat lookup of the same certificate does not ask the grading sources again. The request waits a few seconds for Card Ladder at most and otherwise answers with cardLadderStatus pending; the value is there on a later lookup. PSA, CGC and BGS certificates only; TAG returns null.
A PSA or CGC value is priced by a queue rather than inline, so a first lookup of an unpriced certificate usually answers pending and the value is there within a minute or two; a value under a day old answers at once. Several certificates at a time: POST /api/v1/grading/certs/batch.
GET /api/v1/grading/certs/PSA/164066991 These inputs are shared across all docs pages, so an id entered here carries over.
{
"success": true,
"data": {
"certificate": {
"provider": "PSA",
"certNumber": "164066991",
"grade": "GEM MT 10",
"gradeQualifier": null,
"labelType": null,
"autographGrade": null,
"signers": null,
"cardName": "SANJI",
"cardSet": "ONE PIECE PREMIUM CARD COLLECTION 25TH EDITION",
"cardNumber": "013",
"cardYear": "2023",
"cardVariety": null,
"language": null,
"imageUrl": "https://d1htnxwo4o0jhw.cloudfront.net/cert/213049068/medium/WUaiPuclk0WkFjgWaQ5qnw.jpg",
"imageUrls": {
"front": "https://d1htnxwo4o0jhw.cloudfront.net/cert/213049068/medium/WUaiPuclk0WkFjgWaQ5qnw.jpg",
"back": "https://d1htnxwo4o0jhw.cloudfront.net/cert/213049068/medium/EKbeCJvD4UKPH8ka2ufUlA.jpg",
"slabFront": "https://d1htnxwo4o0jhw.cloudfront.net/cert/213049068/medium/WUaiPuclk0WkFjgWaQ5qnw.jpg",
"slabBack": "https://d1htnxwo4o0jhw.cloudfront.net/cert/213049068/medium/EKbeCJvD4UKPH8ka2ufUlA.jpg"
},
"population": {
"total": 1572
},
"providerReportUrl": "https://www.psacard.com/cert/164066991/psa",
"verificationStatus": "verified",
"verificationConfidence": "high"
},
"match": {
"status": "exact",
"reason": null
},
"cardLadder": {
"id": "2412a1b8f45f12a1adf3f933dfd1155c4ed21c82",
"pop": null,
"set": "One Piece Premium Card Collection 25th Edition",
"asOf": "2026-10-17T13:27:32.520Z",
"year": "2023",
"grade": "10",
"label": "2023 One Piece Premium Card Collection 25th Edition #013 Sanji",
"number": "013",
"player": "Sanji",
"clValue": 45.72,
"category": null,
"condition": "g10",
"thumbnail": "https://i.ebayimg.com/images/g/VbgAAeSwiGpqvTv1/s-l400.webp",
"variation": null,
"confidence": 5,
"newestSale": {
"date": "2026-10-15T01:45:00.000Z",
"price": 46,
"url": "https://www.ebay.com/itm/117440063647",
"type": "Auction"
},
"marketValue": 46,
"recentSales": [
{
"date": "2026-10-15T01:45:00.000Z",
"price": 46,
"url": "https://www.ebay.com/itm/117440063647",
"type": "Auction"
},
{
"date": "2026-10-14T01:40:00.000Z",
"price": 60,
"url": "https://www.ebay.com/itm/298735352053",
"type": "Auction"
},
{
"date": "2026-10-13T01:21:00.000Z",
"price": 71,
"url": "https://www.ebay.com/itm/307205544533",
"type": "Auction"
},
{
"date": "2026-10-12T16:14:58.000Z",
"price": 98.32,
"url": "https://www.ebay.com/itm/227464970817",
"type": "FixedPrice"
},
{
"date": "2026-10-12T01:11:00.000Z",
"price": 54,
"url": "https://www.ebay.com/itm/298714627556",
"type": "Auction"
}
],
"currentValue": 45.72,
"gradingCompany": "PSA",
"currentListings": []
},
"cardLadderStatus": "found",
"card": {
"id": "oppr-485263",
"name": "Sanji - OP01-013 (Alternate Art)",
"number": "OP01-013",
"setId": "OPPR",
"setName": "One Piece Promotion Cards",
"language": "en",
"game": "onepiece",
"type": "Character",
"cost": "2",
"power": "3000",
"attribute": "Strike",
"colors": [
"Red"
],
"rules": [
"[Activate:Main] [Once Per Turn] You may add 1 card from your Life area to your hand: This Character gains +2000 power during this turn. Then, give this Character up to 2 rested DON!! cards."
],
"subtypes": [
"Straw Hat Crew"
],
"rarity": "PR",
"images": {
"small": "https://api.rip.fun/storage/v1/object/public/tcg/cards/oppr-485263.large.webp",
"large": "https://api.rip.fun/storage/v1/object/public/tcg/cards/oppr-485263.large.webp"
},
"isHolo": false,
"isReverse": false,
"isNonFoil": true,
"isFirstEdition": false
},
"gradedPrice": {
"cardId": "oppr-485263",
"company": "PSA",
"grade": "10",
"price": 102.25,
"low": 64.3,
"mid": null,
"high": 168.85,
"currency": "USD",
"timestamp": "2026-09-05T01:51:00.000Z"
}
}
}curl -X GET 'https://service.rip.fun/api/v1/grading/certs/PSA/164066991' \ -H 'X-API-Key: rip_…'
| Field | Type | Required | Description |
|---|---|---|---|
provider | string | yes | Path parameter: PSA, BGS (BECKETT is accepted), CGC or TAG. A provider is required; the API never tries another grader. |
certNumber | string | yes | Path parameter: the certificate number as a string. Preserve leading zeroes. Spaces and hyphens are normalized; full report URLs are not accepted. |
data)| Field | Description |
|---|---|
data.certificate | Verified provider and certNumber; grade, gradeQualifier, labelType, autographGrade and signers; cardName, cardSet, cardNumber, cardYear, cardVariety and language; imageUrl/imageUrls, population, providerReportUrl and verificationConfidence. Missing provider fields are null. While the grader’s own site cannot be reached, a PSA or CGC certificate may still verify from the grader’s record held elsewhere: grade, labelType and imageUrls are present, the card fields are null and verificationConfidence is medium. |
data.match | status: exact or unresolved; reason: null for an exact match, otherwise a machine-readable explanation. This describes catalog matching, separately from certificate verification. certificate_names_no_card means the verified record carries no card words (see data.certificate), so there was nothing to match. |
data.card | Exact catalog id, name, number, setId, setName, game, language, small/large images and finish/edition flags. Available card facts include artist, rarity, subtypes, abilities, attacks (moves), weaknesses and resistances. Pokémon adds supertype, types and HP; One Piece adds type, cost, power, attribute, colors, rules, block, counter and life. Missing card facts are omitted; the existing images object and identity fields keep their shape. Null for unresolved language, set, number, name, edition or printing. Contains no raw prices. |
data.cardLadder | Card Ladder’s record of this certificate, or null when Card Ladder has no card for it, could not be reached, or has not answered yet: id, label, player, year, set, number and variation as Card Ladder files the card; condition (Card Ladder’s grade bucket) and grade; gradingCompany; currentValue, marketValue and clValue in US dollars; confidence (1–5); pop; newestSale, recentSales and currentListings as {date, price, url, type}; thumbnail; asOf, when Card Ladder was asked (a value older than a day is served as it is while a fresh one is fetched). A value source beside gradedPrice, never substituted for it; the sales are shown so a value can be judged. |
data.cardLadderStatus | found, not_found, unavailable, pending or off. pending: Card Ladder had not answered within the request’s wait (a few seconds); the value is being fetched and a later lookup of the same certificate returns it. |
data.gradedPrice | Null when exact-card, exact-provider, exact-grade pricing is unavailable. Otherwise cardId, company, grade, price/low/mid/high in currency units (USD means dollars), currency and timestamp. No raw-card price, other grade or other grader is substituted. Specialty labels and qualified/autographed slabs without an exact supported price remain null. |
| Status | Code | When |
|---|---|---|
| 400 | invalid_certificate | Missing, malformed or overlong certificate number. |
| 400 | unsupported_provider | Provider is unsupported; SGC lookup is not integrated. |
| 404 | certificate_not_found | The specified grader has no record for this certificate. |
| 502 | provider_identity_mismatch | The provider returned a different provider/certificate identity; its data is withheld. |
| 429 | rate_limited | Over 30 requests/minute for the key, or 4 uncached lookups already running on one server instance. Wait for Retry-After (5 seconds for the latter) before retrying. |
| 503 | provider_unavailable | Provider lookup failed and no verified record of the certificate was available. Retry after the Retry-After header (30 seconds); do not substitute another provider. |
| 503 | certificate_unverified | The provider could not verify the certificate. Retry after the Retry-After header (30 seconds). |
See Errors for the response envelope and the full code list.