CinderCore · open refractory property data
CinderCorerefractory property dataset

Updated 14 October 2026

Data files & API

There is no server here to query. The “API” is a pair of static files that sit next to the pages and are served unchanged: a JSON array and the same records as CSV. The browser and the record view read the JSON directly with a relative fetch; you can do the same, or just open the files.

The files

PathFormatRecordsWhat it is
/api/materials.jsonJSON array120The browse index, one object per grade, all 26 fields, nulls kept.
/data/materials.csvCSV, UTF-8, LF120The same records, same field order, lists joined with a semicolon.
/feed.xmlAtom 1.0-One entry per dataset release, newest first.

The JSON and CSV are generated from the same source as the release tarball, so a value here never disagrees with the full dataset - it is a strict subset. The browse index is a curated 120 of the 412 records: at least six per family, picked to span each family’s temperature and density range rather than to be a random sample. If you need all 412, or fields that change between releases, take the tarball and read it with cinderq.

Shape of a record

Every object carries all 26 keys even when the value is null; the key is never dropped. Lists (aliases, source_ids) are arrays, empty as [], never null. The schema page gives the type, unit and meaning of each field and the four enumerations.

{
  "id": "CC-0137",
  "name": "corundum brick, 99% Al2O3",
  "family": "corundum",
  "aliases": ["sintered alumina brick", "AL99"],
  "al2o3_pct": 99.1,
  "max_service_c": 1750,
  "max_service_atmosphere": "oxidising",
  "k_1000_w_mk": 3.0,
  "k_ref_c": 1000,
  "k_method": "hot-wire",
  "bulk_density_g_cm3": 3.1,
  "slag_index": 4,
  "source_ids": ["S-004", "S-019"],
  "confidence": "high",
  "updated": "2026-06-28"
}

Abbreviated to fifteen keys for the page; the file carries all twenty-six.

Reading it yourself

Because the files are relative to the site, a browser on any page of this domain can read them without a cross-origin request. The record view does exactly this:

fetch("/api/materials.json")
  .then(r => r.json())
  .then(rows => rows.find(r => r.id === "CC-0137"));

From a shell, the CSV opens in any spreadsheet, and the JSON answers the common questions without a dependency:

# every corundum grade good past 1750 C, as a table
$ curl -s https://cindercore.dev/api/materials.json \
  | jq -r '.[] | select(.family=="corundum" and .max_service_c>=1750)
            | [.id,.name,.max_service_c] | @tsv'

# count records per family
$ curl -s https://cindercore.dev/api/materials.json \
  | jq -r 'group_by(.family)[] | "\(.[0].family)\t\(length)"'

What is stable

  • Paths. /api/materials.json and /data/materials.csv will not move within a major dataset version.
  • Field order. The CSV header is the canonical field order and matches the schema. New fields are appended, never inserted.
  • Ids. A record id is permanent. A withdrawn grade leaves its id retired, never reassigned.
  • Subset rule. If a grade is in this index, its values equal the release values exactly. The index may gain or lose grades between releases; the numbers on a kept grade do not silently change without a changelog line.