PSA Card APIpsacard.com ↗
Access PSA certification details, population reports, price guide searches, and recent sales data for graded collectibles via a structured JSON API.
What is the PSA Card API?
This API exposes 9 endpoints covering PSA-graded collectible data, including certification lookup, population reports, and price guide search. The get_cert_details endpoint returns grade, subject, year, brand, card number, spec ID, population count, and image URLs for any PSA cert number. Other endpoints let you search population reports by keyword, drill into per-set or per-spec grade distributions, and retrieve recent sale records attached to a specific certification.
curl -X GET 'https://api.parse.bot/scraper/311daf8c-242f-4c68-af70-b50617fd1d13/get_cert_details?cert_number=69225215' \ -H 'X-API-Key: $PARSE_API_KEY'
Retrieve details for a specific PSA certification number. Returns card name, grade, population data, images, spec ID, and PSA value estimate.
| Param | Type | Description |
|---|---|---|
| cert_numberrequired | string | PSA Certification Number (e.g., '69225215') |
{
"type": "object",
"fields": {
"year": "string year the card was issued",
"brand": "string brand/title of the card set",
"grade": "string PSA grade (e.g., 'GEM MT 10')",
"images": "array of full-size image URLs for the card (may be empty if no images scanned)",
"spec_id": "string SpecID identifying the card specification in PSA's system",
"subject": "string subject/player name on the card",
"variety": "string variety or pedigree designation (e.g., 'DARK PHANTASMA'), empty string if none",
"card_title": "string full title including year, brand, card number, and subject",
"population": "string total PSA population count for the card set",
"card_number": "string card number within the set (e.g., '074')",
"cert_number": "string the certification number",
"psa_estimate": "string PSA value estimate (e.g., '$115.00'), or null if unavailable",
"back_image_url": "absolute HTTPS URL of the full-size card back image, or null if unavailable",
"front_image_url": "absolute HTTPS URL of the full-size card front image, or null if unavailable"
},
"sample": {
"data": {
"url": "https://www.psacard.com/cert/69225215/psa",
"cert_number": "69225215"
},
"status": "success"
}
}About the PSA Card API
Certification Lookup and Sales
get_cert_details accepts a single cert_number and returns the card's grade, subject, year, brand, card_number, variety, spec_id, population, and an array of full-size images. For bulk workflows, get_cert_details_batch accepts a JSON array of up to 200 cert numbers via the cert_numbers parameter and returns results in request order, with each item including a success flag plus the same identification fields. get_cert_full combines cert details with the full grade-level population breakdown (Grade1 through Grade10, GradeTotal, Total) for one cert or a batch of up to 200, making it the most complete single-call option for valuation or inventory tooling.
get_cert_sales returns the recent sale history attached to a cert page: each sale object includes date_sold, price, title, venue, and a listing URL. The truncated boolean indicates whether additional sales exist beyond the public window. total_sales is always null because PSA does not expose an all-time count on the public cert page.
Population Report
search_population_report accepts a query string (for example, '1999 Pokemon Game' or 'Mickey Mantle') and an optional category_id, returning matching sets with their HeadingID, SetName, YearIssued, SportCategoryID, and CategoryName. Those IDs feed into get_population_report_by_set, which returns grade counts (Grade1 through the top grade) for every card in the set, paginated via start and length and filterable with a search parameter. get_population_by_spec narrows the query to a single card by spec_id, returning individual grade counts and a Total.
Price Guide and Categories
search_price_guide mirrors the population search interface but returns price guide entries, each with SMRSetID, SetName, SportCategoryID, CategoryName, and SetNameSEO. It does not return per-grade price values directly — it identifies the matching set records. browse_population_categories requires no inputs and returns the full list of collectible categories with their name, slug, url, and category_id, which can be passed as category_id filters in other endpoints.
The PSA Card API is a managed, monitored endpoint for psacard.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when psacard.com changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official psacard.com API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Build a portfolio tracker that looks up cert numbers in bulk and stores grade, population, and recent sale prices.
- Identify short-printed or high-grade-scarce cards by comparing Grade10 counts against Total from get_population_by_spec.
- Monitor recent sale prices for a specific PSA cert using get_cert_sales to track market movement over time.
- Construct a grading arbitrage tool that cross-references population data from get_population_report_by_set with price guide results.
- Catalog a card collection by batch-fetching cert details for up to 200 slabs in one call with get_cert_details_batch.
- Enumerate all available collectible categories via browse_population_categories to build a category-aware search UI.
- Cross-reference HeadingID and SportCategoryID from search_population_report into get_population_report_by_set for full set census data.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 200 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
| Team | $300/mo | 20,000 | 300 req/min |
| Company | $1,000/mo | 100,000 | 500 req/min |
Each endpoint has a fixed posted price per successful call — most fall between 1 and 10 credits — shown on this API's page before you run it. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.