PSA API endpoint
Fetches one PSA Price Guide set's full grade-by-grade price table: every card in the set with PSA's own formatted price per grade column (the set's own grade columns vary -- a vintage set may carry more/lower grade tiers than a modern one). category_path, set_path and set_id together identify the set; use the matching fields from a psa-price-guide-search result, or category_path from psa-price-guide-categories combined with a set_path/set_id found by browsing PSA's own category page.
/psa/price-guide/setQuery parameters:
category_path (required) — the category's URL path segment, from
psa-price-guide-categories or a psa-price-guide-search result, e.g.
baseball-card-values.set_path (required) — the set's own URL path segment, from a
psa-price-guide-search result, e.g. 1974-topps.set_id (required) — PSA's own numeric set id, from a
psa-price-guide-search result, e.g. 1239.Notable response behavior:
category_path, set_path and set_id must all three match exactly —
the numeric set_id alone does not resolve if either slug is wrong.
Use the matching fields from one psa-price-guide-search result rather
than constructing them independently.grades is the set's own grade-column labels, in PSA's own display
order (e.g. ["NM 7","NM-MT 8","MT 9","GEM-MT 10"]). This varies by
set — a vintage set may carry more/lower grade tiers than a modern one.prices map omits any grade with no price for that card,
rather than including it with an empty value.item_id.category_path/set_path/set_id combination PSA cannot resolve
returns 404.| Field | Filled in, of 680 checked | Values in the sample |
|---|---|---|
| description | 500 | “Commons 1-660” and 498 other values |
| prices | 500 | |
| card_number | 497 | 1 to 483, median 240 |
| item_id | 497 |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| category_path | string | Yes | Category URL path segment, from psa-price-guide-categories or a psa-price-guide-search result | baseball-card-values | |
| set_path | string | Yes | Set URL path segment, from a psa-price-guide-search result | 1974-topps | |
| set_id | string | Yes | PSA's own numeric set id, from a psa-price-guide-search result | 1239 | |
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/psa/price-guide/set?category_path=baseball-card-values&set_path=1974-topps&set_id=1239" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"set_id": "1239",
"title": "1974 Topps",
"grades": [
"NM 7",
"NM-MT 8",
"MT 9",
"GEM-MT 10"
],
"cards": [
{
"description": "Commons 1-660",
"prices": {
"NM 7": "2",
"NM-MT 8": "4",
"MT 9": "8",
"GEM-MT 10": "65"
}
},
{
"description": "Ken Griffey, Sr. (R)",
"card_number": "598",
"item_id": 47874,
"prices": {
"NM 7": "35+",
"NM-MT 8": "60+",
"MT 9": "150+",
"GEM-MT 10": "1,770+"
}
}
],
"source_url": "https://www.psacard.com/priceguide/baseball-card-values/1974-topps/1239"
}
}Request schema
No body schema
Response schema
#/definitions/psa.priceGuideSetResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | psa.PriceGuideSetResponse | No | ||||
| data.cards | array | No | Cards is every row of the set's price table, in PSA's own display order. | |||
| data.cards[].card_number | string | No | CardNumber is the card's number within the set. Empty for group-summary rows. | |||
| data.cards[].description | string | No | Description is the card/row's own name as PSA Price Guide displays it, e.g. "Ken Griffey, Sr. (R)" or a group-summary row like "Commons 1-660". | |||
| data.cards[].item_id | integer | No | ItemID is PSA's own numeric item id for this specific card, usable for cross-referencing a psa-price-guide-search result. Nil for group-summary rows, which have no single-item id. | |||
| data.cards[].prices | object | No | Prices maps each of Grades (the set's own grade-column labels, e.g. "NM 7") to PSA's own formatted price text for this card at that grade, e.g. "35+" (a trailing "+"/"-" is PSA's own monthly-trend marker). A grade with no price for this card is omitted from the map rather than present as an empty string. | |||
| data.grades | array | No | Grades are this set's own grade-column labels, in the order PSA itself displays them (e.g. ["NM 7","NM-MT 8","MT 9","GEM-MT 10"]). Confirmed live that this varies by set -- a vintage set may carry more/lower grade columns than a modern one -- so it is returned per response rather than assumed fixed. | |||
| data.set_id | string | No | ||||
| data.source_url | string | No | ||||
| data.title | string | No | Title is the set's display name, e.g. "1974 Topps". | |||
| msg | string | No | OK |
| Status | Description | Schema |
|---|---|---|
| 400 | Bad Request | #/definitions/app.Response |
| 404 | Not Found | #/definitions/app.Response |
| 500 | Internal Server Error | #/definitions/app.Response |
| 503 | Service Unavailable | #/definitions/app.Response |
Use environment variables for secrets and keep Crawlora API keys server-side.
curl -X GET "https://api.crawlora.net/api/v1/psa/price-guide/set?category_path=baseball-card-values&set_path=1974-topps&set_id=1239" \
-H "x-api-key: $CRAWLORA_API_KEY"