/api/v1/grading/certs/batch read:catalog 1
creditLook up many slabs at once: a list of certificate numbers, with one provider for the body or a provider per entry. Each certificate is answered with the single lookup’s data, or its own pending or error, keyed by provider and certificate number — never by position. Use it to price an inventory, check a shipment, or warm the records before a sale; use the single GET for one slab at a time.
Uses the existing API key and read:catalog scope. Costs 1 credit per distinct certificate in the batch (X-Credits-Cost carries the total); an invalid envelope costs nothing. Limit: 10 batch calls a minute per key, with two batches in flight per key at a time.
The call is complete within waitMs whatever the graders do. A certificate the graders have not answered yet comes back pending, not as an error, and its lookup finishes behind the answer: a second call for the pending ones a few seconds later reads them from the kept record and costs its own credits.
Values (cardLadder) for PSA and CGC certificates are priced by a queue: a batch of unpriced certificates answers with their records and cardLadderStatus pending, and the values are there on a call a minute or two later. BGS values and all other data are answered inline as on the single lookup.
Every result is checked before it leaves: the record names the certificate asked for, numbers are numbers, lists are lists, and cardLadderStatus says what cardLadder shows. A record that fails that check is an internal_error for that certificate, never a half answer.
The runner on this page sends a one-certificate batch for the sample above; a real call lists up to 500.
POST /api/v1/grading/certs/batch These inputs are shared across all docs pages, so an id entered here carries over.
{
"provider": "PSA",
"certs": [
"164066991"
]
}{
"success": true,
"data": {
"results": [
{
"provider": "PSA",
"certNumber": "164066991",
"requested": [
"164066991"
],
"status": "ok",
"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"
}
}
}
],
"summary": {
"requested": 1,
"unique": 1,
"ok": 1,
"pending": 0,
"error": 0,
"cardLadderPending": 0
}
}
}curl -X POST 'https://service.rip.fun/api/v1/grading/certs/batch' \
-H 'X-API-Key: rip_…' \
-H 'Content-Type: application/json' \
-d '{"provider":"PSA","certs":["164066991"]}' | Field | Type | Required | Description |
|---|---|---|---|
provider | string | — | The provider for every string entry in certs: PSA, BGS (BECKETT is accepted), CGC or TAG. Required unless every entry names its own provider. |
certs | array | yes | 1–500 entries: a certificate number as a string (takes the body’s provider), or { provider, certNumber } for a mixed batch. Preserve leading zeroes; spaces and hyphens are normalized. The same provider and number listed twice collapses into one result whose requested array lists both entries. |
waitMs | number | — | How long the call waits for its lookups before answering, in milliseconds: 20000 by default, 25000 at most. Lookups still running at that point are returned as pending and finish behind the answer. |
data)| Field | Description |
|---|---|
data.results[] | One per distinct certificate, in first-asked order: provider, certNumber, requested (the entries that asked for it) and status — ok, pending or error. Match results to your list by provider and certNumber. |
data.results[].data | On ok: exactly the single lookup’s data — certificate, match, card, gradedPrice, cardLadder and cardLadderStatus — with the same meanings and the same nulls. |
data.results[].retryAfterSeconds | On pending: the lookup had not finished within waitMs; it completes behind the answer. Ask again for those certificates after this many seconds (also sent as the Retry-After header) and they answer from the kept record. |
data.results[].error | On error: the single lookup’s error code for that certificate (invalid_certificate, unsupported_provider, certificate_not_found, provider_unavailable, provider_identity_mismatch, certificate_unverified, internal_error) with httpStatus and message; a 503 carries retryAfterSeconds. One certificate’s error never fails the call. |
data.summary | requested, unique, ok, pending, error and cardLadderPending (certificates whose value is still being fetched) for the whole batch. |
| Status | Code | When |
|---|---|---|
| 400 | invalid_request | No certs array, an empty one, an entry that is neither a string nor { provider, certNumber }, or a string entry with no provider to take. |
| 400 | batch_too_large | More than 500 entries. Split the list; nothing was looked up or metered. |
| 429 | rate_limited | Over 10 batch calls a minute for the key, or two batches already in flight for it. Wait for Retry-After before retrying. |
See Errors for the response envelope and the full code list.