Pricing API
Base URL: https://api.onelab.im.
No API key or account is required.
This public API has three jobs:
- Find the exact card and grade.
- Get its current Cardinal price.
- Get its historical price series.
Find a card and grade
Search for a card:
GET /api/catalog/search?search={text} Read items[].product and keep product_id.
Resolve the requested grade:
GET /api/skus?product_id={product_id}&grading_authority={grader}&grade_label={grade} For PSA 10:
GET /api/skus?product_id={product_id}&grading_authority=PSA&grade_label=10 Select the exact unqualified SKU unless the user requested a qualifier. Keep sku_id.
Already have a sku_id:
GET /api/skus/{sku_id} Current Cardinal price
GET /api/skus/{sku_id}/prices Read latest_close.
latest_close contains:
reference_onsource_throughclosing_price_major
currency is returned separately.
This endpoint is only for the latest published Cardinal price.
Historical prices
Cardinal history:
GET /api/products/{product_id}/history.json?source=cardinal Card Ladder history:
GET /api/products/{product_id}/history.json?source=card_ladder Read series[] and select entries whose sku_id matches the requested grade. Card Ladder returns separate series for native history, collected values, and published estimates. Keep each price_basis separate.
Each series contains points[].
Each point contains:
dateprice_majorprice_basis
Never combine Cardinal and Card Ladder into one price series.
Use Cardinal history when the user asks for Cardinal pricing. Use Card Ladder history when the user explicitly asks for Card Ladder or provider history.
Do not use sales as prices.
Use only the public endpoints documented above.
Endpoint reference
GET /api/catalog/search
card_number(query, optional)collection(query, optional)collection_id(query, optional)franchise(query, optional)game(query, optional)language_code(query, optional)limit(query, optional)product_kind(query, optional)region_code(query, optional)release_year(query, optional)search(query, required)sport(query, optional)vertical(query, optional)
GET /api/products/{product_id}/history.json
product_id(path, required)filename(query, optional)source(query, optional)
GET /api/skus
after(query, optional)grade_label(query, optional)grading_authority(query, optional)limit(query, optional)product_id(query, optional)search(query, optional)sku_kind(query, optional)
GET /api/skus/{sku_id}
sku_id(path, required)
GET /api/skus/{sku_id}/prices
sku_id(path, required)