psacard.com APIpsacard.com ↗
Access PSA certification details, population reports, and price guide data for graded trading cards and collectibles via a structured REST API.
curl -X GET 'https://api.parse.bot/scraper/311daf8c-242f-4c68-af70-b50617fd1d13/get_cert_details?cert_number=12345678' \ -H 'X-API-Key: $PARSE_API_KEY'
Retrieve details for a specific PSA certification number. Returns card name, grade, population data, and images. Note: This endpoint may be subject to Cloudflare challenges.
| Param | Type | Description |
|---|---|---|
| cert_numberrequired | string | PSA Certification Number (e.g., '12345678') |
{
"type": "object",
"fields": {
"year": "string",
"brand": "string",
"grade": "string",
"images": "array",
"subject": "string",
"card_title": "string",
"population": "string",
"cert_number": "string"
},
"sample": {
"data": {
"url": "https://www.psacard.com/cert/69225215/psa",
"cert_number": "69225215"
},
"status": "success"
}
}About the psacard.com API
This API provides 5 endpoints covering PSA-graded collectible data, including certification lookups, population report searches, and price guide queries. The get_cert_details endpoint returns card name, grade, images, and population counts for any PSA certification number, while search_population_report and get_population_report_by_set expose grading distribution data across all grade levels (1–10) for every tracked card set.
Certification Lookups and Population Data
The get_cert_details endpoint accepts a PSA certification number (e.g., '12345678') and returns structured data including year, brand, subject, card_title, grade, population, cert_number, and any associated images. This is the primary way to verify a single graded card's details. Note that this endpoint may encounter Cloudflare challenges, which can affect response availability.
Population Report Search and Set-Level Data
search_population_report takes a query string — such as a set name like '1999 Pokemon Game' or a player name like 'Mickey Mantle' — and returns an array of matching card sets. Each result includes HeadingID, SetName, YearIssued, SportCategoryID, and CategoryName. The HeadingID and SportCategoryID values feed directly into get_population_report_by_set, which returns per-card grading counts (Grade1 through Grade10) alongside SubjectName, CardNumber, SpecID, and Variety. Pagination is supported via start and length parameters, and an optional search string filters results within a set.
Price Guide and Category Browsing
search_price_guide accepts the same query and optional category_id inputs as the population search, returning matching entries with SMRSetID, SetName, SportCategoryID, CategoryName, and SetNameSEO. For both price guide and population searches, setting category_id to 0 searches across all categories — non-zero values may return empty results. browse_population_categories requires no inputs and returns the full list of collectible categories, each with name, url, slug, and category_id, which can be used to understand available scopes across the other endpoints.
- Verify authenticity and grade of a PSA-certified card using its certification number via get_cert_details
- Build a collection tracker that pulls grade-level population counts for specific card sets using get_population_report_by_set
- Compare population scarcity across PSA 9 and PSA 10 grades to inform buying and selling decisions
- Search price guide entries for a specific player or set to surface SMRSetID links for pricing research
- Enumerate all collectible categories via browse_population_categories to build a structured navigation or filtering UI
- Monitor population changes for vintage baseball or Pokemon card sets by periodically querying search_population_report
- Cross-reference HeadingID values from population searches to retrieve full grading distributions for investment analysis
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 250 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does PSA have an official developer API?+
What exactly does get_population_report_by_set return, and how do I get the inputs for it?+
SpecID, SubjectName, CardNumber, Variety, and numeric grade counts from Grade1 through Grade10. You obtain the required set_id from the HeadingID field and category_id from the SportCategoryID field returned by search_population_report. Pagination is controlled via start and length.Does the API return actual sale prices or price history for graded cards?+
search_price_guide endpoint returns set-level metadata including SMRSetID, SetName, and SetNameSEO, but does not return individual card prices or historical price data. You can fork this API on Parse and revise it to add an endpoint targeting per-card price data from the PSA Price Guide.Are there any known limitations with the get_cert_details endpoint?+
Can I filter population report searches by category to narrow results?+
category_id parameter is available on both search_population_report and search_price_guide, but non-zero values may return empty results. The reliable approach is to use category_id: 0 (the default) to search across all categories, then use the CategoryName and SportCategoryID fields in the response to identify the right category for downstream filtering with get_population_report_by_set.