mtgjson-website icon indicating copy to clipboard operation
mtgjson-website copied to clipboard

Documentation: TCGplayer SKUs finish field is optional, not required

Open the-muppet opened this issue 2 months ago • 1 comments

Documentation Issue: TCGplayer SKUs finish field

Problem

The TCGplayer SKUs data model documentation contains inaccuracies about the finish field.

Documentation Says

The docs state that finish is a required field (not marked as optional):

  • Type: string
  • Example: "FOIL_ETCHED" (with underscore)
  • Introduced: v5.2.0

Actual Data Structure

Based on the actual TcgplayerSkus.json file (v5.2.2+20251001):

Regular cards (no special foiling):

{
  "condition": "NEAR MINT",
  "language": "ENGLISH",
  "printing": "FOIL",
  "productId": 111268,
  "skuId": 3045711
  // No "finish" field
}

Cards with etched foiling (the only special finish found):

{
  "condition": "NEAR MINT",
  "finish": "FOIL ETCHED",    // ← Optional field, with SPACE not underscore
  "language": "ENGLISH",
  "printing": "FOIL",
  "productId": 504636,
  "skuId": 7267191
}

Issues Found

  1. finish is optional, not required - it only appears on cards with special foil treatments
  2. Value format: "FOIL ETCHED" (with space), not "FOIL_ETCHED" (with underscore) as shown in docs
  3. Missing clarification: Docs don't explain when this field is present vs absent

Expected Fix

Update the documentation to:

  1. Mark finish as optional (finish?: string)
  2. Correct the example value to "FOIL ETCHED" (with space)
  3. Add note: "Only present for cards with special foil treatments (e.g., etched foils). Regular foils and non-foils do not have this field."

Impact

This causes confusion when parsing/querying SKU data, as developers expect finish to always be present based on the docs.

the-muppet avatar Oct 02 '25 02:10 the-muppet

Additional Finding: Data Types

Also noticed that productId and skuId are numbers in the actual data, not strings:

{
  "productId": 111268,    // number, not "111268"
  "skuId": 3045711       // number, not "3045711"
}

The TypeScript model shows them as string, but the actual JSON has them as number.

the-muppet avatar Oct 02 '25 02:10 the-muppet