Appearance
Slab Pricing
Coda returns a full PSA / BGS / CGC / SGC x grades 7-10 pricing matrix for every tracked product.
Supported graders and grades
| Grader | Full Name | Grades |
|---|---|---|
| PSA | Professional Sports Authenticator | 7, 8, 9, 10 |
| BGS | Beckett Grading Services | 7, 8, 9, 10 |
| CGC | Certified Guaranty Company | 7, 8, 9, 10 |
| SGC | Sportscard Guaranty | 7, 8, 9, 10 |
How grades 7-9 are priced (two passes)
Pass 1 - base TWAP + band blend
The same pipeline as grade 10 runs first, followed by a blend between the card-specific TWAP and a composite band TWAP computed over a 30-day rolling window. Weighting is proprietary.
Pass 2 - band-primary blend (developer routes only)
The composite band TWAP is the primary reference for the final price. Grader-specific data acts as a secondary differentiator. Weighting is proprietary.
Prices are clamped: grade 7 <= grade 8 <= grade 9 <= grade 10 per grader.
Era-aware gem-10 ratios
When grader-specific observation data is thin, prices are anchored to the grade-10 price using era-calibrated ratios. Modern and vintage cards use different ratio tables reflecting their distinct secondary market dynamics.
metadata.era in the response indicates which table applies. Contact us if you need details on the calibration methodology.
Condition keys
| Condition Key | Display |
|---|---|
psa10 | PSA 10 |
psa9 | PSA 9 |
psa8 | PSA 8 |
psa7 | PSA 7 |
bgs10 | BGS 10 |
cgc10 | CGC 10 |
sgc10 | SGC 10 |
nm | Ungraded NM |
Empty cell fallback chain
When no observations exist for a grader/grade combination:
| Tier | Source |
|---|---|
| 1 | Prior snapshot (same methodology, within 30 days) |
| 2 | Prior snapshot on adjacent grade (same grader) |
| 3 | Composite band TWAP for the matching grade |
| 4 | NM market TWAP as a cross-tier proxy |
| 5 | Median of any recent observations |
| 6 | 1 cent placeholder (last resort) |
meta.oracle_fallback_tier in the response shows which tier fired.
Iterating the full matrix
python
data = r.json()
for grader in ["PSA", "BGS", "CGC", "SGC"]:
for grade in ["10", "9", "8", "7"]:
cell = data["graded"][grader][grade]
price = cell.get("price_minor")
if price is None:
print(f"{grader} {grade}: no price")
else:
print(f"{grader} {grade}: ${price / 100:,.2f}")