{
  "openapi": "3.1.0",
  "info": {
    "title": "Sports Card Radar public data API",
    "version": "1.0.0",
    "summary": "Trading card reference data as JSON: published grading tolerances, the grading companies, production eras, card anatomy, rookie conventions, selling and shipping structure, and the US CPI series.",
    "description": "A read-only, keyless, CORS-open API over the seven datasets this site publishes. Every number here is the same number the human-readable pages render, because the pages and these endpoints import the same modules. Reference values were read from their publishers on 2026-09-11 and each row carries the URL it came from. Anything that changes quarterly — grading fees, marketplace percentages, postage — is published as a dated starting value with the publisher named, never as a current rate. Reuse is licensed CC BY 4.0 with a link back.",
    "contact": {
      "name": "Vast Flow, LLP",
      "url": "https://sportscardradar.com/contact/",
      "email": "support@vastflow.kz"
    },
    "license": {
      "name": "CC BY 4.0",
      "url": "https://creativecommons.org/licenses/by/4.0/"
    },
    "termsOfService": "https://sportscardradar.com/terms/"
  },
  "servers": [
    {
      "url": "https://sportscardradar.com/api/v1/",
      "description": "Static origin behind Cloudflare"
    }
  ],
  "paths": {
    "/index.json": {
      "get": {
        "operationId": "getIndex",
        "summary": "Entry point",
        "description": "Every dataset with its URL, plus the licence and the discovery documents.",
        "responses": {
          "200": {
            "description": "7 rows.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "dataset": {
                      "type": "string",
                      "description": "Stable identifier for this dataset."
                    },
                    "title": {
                      "type": "string"
                    },
                    "description": {
                      "type": "string"
                    },
                    "source": {
                      "type": "string",
                      "format": "uri"
                    },
                    "publisher": {
                      "type": "string"
                    },
                    "licence": {
                      "type": "object",
                      "description": "CC BY 4.0. Reuse commercially, with a link back to the page or endpoint the figure came from.",
                      "properties": {
                        "name": {
                          "type": "string"
                        },
                        "url": {
                          "type": "string",
                          "format": "uri"
                        },
                        "attribution": {
                          "type": "string"
                        }
                      }
                    },
                    "as_of": {
                      "type": "string",
                      "format": "date",
                      "description": "The date the reference values in this payload were read from their publishers."
                    },
                    "caveats": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      },
                      "description": "How this data can be misread. Carried in the payload rather than only in the docs, because a retrieved passage travels alone."
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/grading-scales.json": {
      "get": {
        "operationId": "getGradingScales",
        "summary": "Published centering tolerances by grading company",
        "description": "The centering tolerance 3 grading companies publish at each grade, with the page each was read from. `front_max_larger_side_pct` is the LARGER side of the worse axis expressed as a percentage of the two opposing borders together — 60 means \"60/40 or better\", not \"60% centred\". `back_max_larger_side_pct` is the separate, looser tolerance for the reverse, which is applied at every company and is frequently the binding constraint. Centering is a ceiling on the grade, never the grade.",
        "responses": {
          "200": {
            "description": "22 grade rows across 3 companies.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "dataset": {
                      "type": "string",
                      "description": "Stable identifier for this dataset."
                    },
                    "title": {
                      "type": "string"
                    },
                    "description": {
                      "type": "string"
                    },
                    "source": {
                      "type": "string",
                      "format": "uri"
                    },
                    "publisher": {
                      "type": "string"
                    },
                    "licence": {
                      "type": "object",
                      "description": "CC BY 4.0. Reuse commercially, with a link back to the page or endpoint the figure came from.",
                      "properties": {
                        "name": {
                          "type": "string"
                        },
                        "url": {
                          "type": "string",
                          "format": "uri"
                        },
                        "attribution": {
                          "type": "string"
                        }
                      }
                    },
                    "as_of": {
                      "type": "string",
                      "format": "date",
                      "description": "The date the reference values in this payload were read from their publishers."
                    },
                    "caveats": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      },
                      "description": "How this data can be misread. Carried in the payload rather than only in the docs, because a retrieved passage travels alone."
                    },
                    "scales": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "company": {
                            "type": "string"
                          },
                          "source_url": {
                            "type": "string",
                            "format": "uri",
                            "description": "The company’s own published scale. Check it rather than trusting this copy."
                          },
                          "read_on": {
                            "type": "string",
                            "format": "date"
                          },
                          "rows": {
                            "type": "array",
                            "items": {
                              "type": "object",
                              "properties": {
                                "grade": {
                                  "type": "number"
                                },
                                "label": {
                                  "type": "string"
                                },
                                "front_max_larger_side_pct": {
                                  "type": "number",
                                  "description": "Larger side allowed on the front. 60 = \"60/40 or better\"."
                                },
                                "back_max_larger_side_pct": {
                                  "type": [
                                    "number",
                                    "null"
                                  ],
                                  "description": "Larger side allowed on the reverse, where the company states one."
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/graders.json": {
      "get": {
        "operationId": "getGraders",
        "summary": "Trading card grading companies",
        "description": "5 companies with founding year, scale, whether subgrades are printed, the top grade, and links to each company’s own standards, fee schedule and population report. The `focus` block is an ORDINAL DESCRIPTION of where a company’s population and buyer pool sit — it is not a quality score, not a ranking, and no evaluation of grading accuracy is published here in either direction. Fees are deliberately absent; the URL is given instead, because a fee schedule is the fastest-moving number in this hobby.",
        "responses": {
          "200": {
            "description": "5 companies.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "dataset": {
                      "type": "string",
                      "description": "Stable identifier for this dataset."
                    },
                    "title": {
                      "type": "string"
                    },
                    "description": {
                      "type": "string"
                    },
                    "source": {
                      "type": "string",
                      "format": "uri"
                    },
                    "publisher": {
                      "type": "string"
                    },
                    "licence": {
                      "type": "object",
                      "description": "CC BY 4.0. Reuse commercially, with a link back to the page or endpoint the figure came from.",
                      "properties": {
                        "name": {
                          "type": "string"
                        },
                        "url": {
                          "type": "string",
                          "format": "uri"
                        },
                        "attribution": {
                          "type": "string"
                        }
                      }
                    },
                    "as_of": {
                      "type": "string",
                      "format": "date",
                      "description": "The date the reference values in this payload were read from their publishers."
                    },
                    "caveats": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      },
                      "description": "How this data can be misread. Carried in the payload rather than only in the docs, because a retrieved passage travels alone."
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/eras.json": {
      "get": {
        "operationId": "getEras",
        "summary": "Trading card production eras",
        "description": "9 eras from 1886 to 2030, each with its supply level and what a COMMON card from it is realistically worth. Era boundaries are conventions rather than events, and the outlook applies to commons: every era has exceptions at the top of its population.",
        "responses": {
          "200": {
            "description": "9 rows.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "dataset": {
                      "type": "string",
                      "description": "Stable identifier for this dataset."
                    },
                    "title": {
                      "type": "string"
                    },
                    "description": {
                      "type": "string"
                    },
                    "source": {
                      "type": "string",
                      "format": "uri"
                    },
                    "publisher": {
                      "type": "string"
                    },
                    "licence": {
                      "type": "object",
                      "description": "CC BY 4.0. Reuse commercially, with a link back to the page or endpoint the figure came from.",
                      "properties": {
                        "name": {
                          "type": "string"
                        },
                        "url": {
                          "type": "string",
                          "format": "uri"
                        },
                        "attribution": {
                          "type": "string"
                        }
                      }
                    },
                    "as_of": {
                      "type": "string",
                      "format": "date",
                      "description": "The date the reference values in this payload were read from their publishers."
                    },
                    "caveats": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      },
                      "description": "How this data can be misread. Carried in the payload rather than only in the docs, because a retrieved passage travels alone."
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/card-reference.json": {
      "get": {
        "operationId": "getCardReference",
        "summary": "Card anatomy and rookie-card conventions",
        "description": "The 8 marks printed on a card with what each identifies and the common misreading of each, plus the rookie-card convention for 5 sports including the year each league's rookie mark era begins. The convention is a market convention, not a law, and it is contested at the edges. Prospect and pre-debut cards are not rookie cards under any of these conventions and are frequently worth more than the rookie card.",
        "responses": {
          "200": {
            "description": "13 rows.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "dataset": {
                      "type": "string",
                      "description": "Stable identifier for this dataset."
                    },
                    "title": {
                      "type": "string"
                    },
                    "description": {
                      "type": "string"
                    },
                    "source": {
                      "type": "string",
                      "format": "uri"
                    },
                    "publisher": {
                      "type": "string"
                    },
                    "licence": {
                      "type": "object",
                      "description": "CC BY 4.0. Reuse commercially, with a link back to the page or endpoint the figure came from.",
                      "properties": {
                        "name": {
                          "type": "string"
                        },
                        "url": {
                          "type": "string",
                          "format": "uri"
                        },
                        "attribution": {
                          "type": "string"
                        }
                      }
                    },
                    "as_of": {
                      "type": "string",
                      "format": "date",
                      "description": "The date the reference values in this payload were read from their publishers."
                    },
                    "caveats": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      },
                      "description": "How this data can be misread. Carried in the payload rather than only in the docs, because a retrieved passage travels alone."
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/selling-routes.json": {
      "get": {
        "operationId": "getSellingRoutes",
        "summary": "Selling routes, shipping and auction structure",
        "description": "7 routes to cash with the structure of each one's cut and how long it takes to be paid, 5 shipping methods with their tracking and insurance status, and the auction structure that makes a hammer price neither what the buyer pays nor what the seller banks. EVERY percentage in this payload is a starting value for a calculator, read on `as_of`, not a current published rate. `typical_gross_pct_of_comp` and `typical_days_to_cash` are ranges collectors report, not published figures. A `null` fee means \"not published\", never \"free\".",
        "responses": {
          "200": {
            "description": "12 rows.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "dataset": {
                      "type": "string",
                      "description": "Stable identifier for this dataset."
                    },
                    "title": {
                      "type": "string"
                    },
                    "description": {
                      "type": "string"
                    },
                    "source": {
                      "type": "string",
                      "format": "uri"
                    },
                    "publisher": {
                      "type": "string"
                    },
                    "licence": {
                      "type": "object",
                      "description": "CC BY 4.0. Reuse commercially, with a link back to the page or endpoint the figure came from.",
                      "properties": {
                        "name": {
                          "type": "string"
                        },
                        "url": {
                          "type": "string",
                          "format": "uri"
                        },
                        "attribution": {
                          "type": "string"
                        }
                      }
                    },
                    "as_of": {
                      "type": "string",
                      "format": "date",
                      "description": "The date the reference values in this payload were read from their publishers."
                    },
                    "caveats": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      },
                      "description": "How this data can be misread. Carried in the payload rather than only in the docs, because a retrieved passage travels alone."
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/cpi.json": {
      "get": {
        "operationId": "getCpi",
        "summary": "US CPI-U annual averages",
        "description": "113 annual averages, 1913 to 2025, series CUUR0000SA0 (1982-84 = 100). This is a republication: the series belongs to the U.S. Bureau of Labor Statistics and the authoritative copy is at https://data.bls.gov/timeseries/CUUR0000SA0. CPI measures a consumer basket, so it answers \"what is this money worth now\" and never \"what should this card cost now\".",
        "responses": {
          "200": {
            "description": "113 rows.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "dataset": {
                      "type": "string",
                      "description": "Stable identifier for this dataset."
                    },
                    "title": {
                      "type": "string"
                    },
                    "description": {
                      "type": "string"
                    },
                    "source": {
                      "type": "string",
                      "format": "uri"
                    },
                    "publisher": {
                      "type": "string"
                    },
                    "licence": {
                      "type": "object",
                      "description": "CC BY 4.0. Reuse commercially, with a link back to the page or endpoint the figure came from.",
                      "properties": {
                        "name": {
                          "type": "string"
                        },
                        "url": {
                          "type": "string",
                          "format": "uri"
                        },
                        "attribution": {
                          "type": "string"
                        }
                      }
                    },
                    "as_of": {
                      "type": "string",
                      "format": "date",
                      "description": "The date the reference values in this payload were read from their publishers."
                    },
                    "caveats": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      },
                      "description": "How this data can be misread. Carried in the payload rather than only in the docs, because a retrieved passage travels alone."
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/product.json": {
      "get": {
        "operationId": "getProduct",
        "summary": "What this site and the Valdar app do",
        "description": "The 24 free tools with what each computes and the page that documents it, plus the app's capabilities, its free tier, and a `not_included` block. The last of those is the half that makes the rest believable: an agent that cannot enumerate what a product does not do will promise something it cannot deliver.",
        "responses": {
          "200": {
            "description": "24 rows.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "dataset": {
                      "type": "string",
                      "description": "Stable identifier for this dataset."
                    },
                    "title": {
                      "type": "string"
                    },
                    "description": {
                      "type": "string"
                    },
                    "source": {
                      "type": "string",
                      "format": "uri"
                    },
                    "publisher": {
                      "type": "string"
                    },
                    "licence": {
                      "type": "object",
                      "description": "CC BY 4.0. Reuse commercially, with a link back to the page or endpoint the figure came from.",
                      "properties": {
                        "name": {
                          "type": "string"
                        },
                        "url": {
                          "type": "string",
                          "format": "uri"
                        },
                        "attribution": {
                          "type": "string"
                        }
                      }
                    },
                    "as_of": {
                      "type": "string",
                      "format": "date",
                      "description": "The date the reference values in this payload were read from their publishers."
                    },
                    "caveats": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      },
                      "description": "How this data can be misread. Carried in the payload rather than only in the docs, because a retrieved passage travels alone."
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/status.json": {
      "get": {
        "operationId": "getStatus",
        "summary": "Dataset freshness",
        "description": "Row counts and the date each dataset was last read from its publisher, plus how often each one actually changes.",
        "responses": {
          "200": {
            "description": "7 rows.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "dataset": {
                      "type": "string",
                      "description": "Stable identifier for this dataset."
                    },
                    "title": {
                      "type": "string"
                    },
                    "description": {
                      "type": "string"
                    },
                    "source": {
                      "type": "string",
                      "format": "uri"
                    },
                    "publisher": {
                      "type": "string"
                    },
                    "licence": {
                      "type": "object",
                      "description": "CC BY 4.0. Reuse commercially, with a link back to the page or endpoint the figure came from.",
                      "properties": {
                        "name": {
                          "type": "string"
                        },
                        "url": {
                          "type": "string",
                          "format": "uri"
                        },
                        "attribution": {
                          "type": "string"
                        }
                      }
                    },
                    "as_of": {
                      "type": "string",
                      "format": "date",
                      "description": "The date the reference values in this payload were read from their publishers."
                    },
                    "caveats": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      },
                      "description": "How this data can be misread. Carried in the payload rather than only in the docs, because a retrieved passage travels alone."
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/openapi.json": {
      "get": {
        "operationId": "getOpenApi",
        "summary": "This document",
        "description": "OpenAPI 3.1 over every endpoint above.",
        "responses": {
          "200": {
            "description": "1 rows.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "dataset": {
                      "type": "string",
                      "description": "Stable identifier for this dataset."
                    },
                    "title": {
                      "type": "string"
                    },
                    "description": {
                      "type": "string"
                    },
                    "source": {
                      "type": "string",
                      "format": "uri"
                    },
                    "publisher": {
                      "type": "string"
                    },
                    "licence": {
                      "type": "object",
                      "description": "CC BY 4.0. Reuse commercially, with a link back to the page or endpoint the figure came from.",
                      "properties": {
                        "name": {
                          "type": "string"
                        },
                        "url": {
                          "type": "string",
                          "format": "uri"
                        },
                        "attribution": {
                          "type": "string"
                        }
                      }
                    },
                    "as_of": {
                      "type": "string",
                      "format": "date",
                      "description": "The date the reference values in this payload were read from their publishers."
                    },
                    "caveats": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      },
                      "description": "How this data can be misread. Carried in the payload rather than only in the docs, because a retrieved passage travels alone."
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}
