For agents and machine readers
The files are the API.
There is no dynamic public API server here yet. A static file that never changes shape is easier to depend on than an endpoint that can. Everything below is fetchable cross-origin, cacheable as documented, and quotable without asking us. A read-only MCP wrapper over these files is planned — not yet available, see Developers & agents on pricing.
Read llms.txt The same information, written for a machine to parse.
Endpoints
| Path | What it is | Schema | Caching |
|---|---|---|---|
/verification-explorer/ledger.json |
Every published lane: what was predicted, when it was sealed, what settles it. | foreglass.verification-ledger/v1 |
no-cache, must-revalidate |
/verification-explorer/ledger.json.ots |
An OpenTimestamps proof over the ledger bytes, in a format any OpenTimestamps client can parse. That a proof exists in this format is not the same claim as "this exact copy is Bitcoin-confirmed today" — a proof can be pending calendar confirmation or already upgraded to a full Bitcoin attestation, and only running a client against the current bytes tells you which. We do not assert a verification result on your behalf. | binary (.ots) | no-cache, must-revalidate |
/verification-explorer/ledger-archive/ |
Dated immutable copies, each with its own .ots. Identify a build by its
sha256, not its filename — see the index below. |
foreglass.verification-ledger/v1 |
immutable, 1 year |
/verification-explorer/ledger-archive/index.json |
Byte size + SHA-256 for every file above, generated at image build time so it can never drift from the bytes actually shipped. Rendered below. | foreglass.ledger-archive-index/v1 |
no-cache, must-revalidate |
/education/fragility-overview.json |
Descriptor for the Daily Fragility overview.
aggregate.value: null, aggregate.status: not_estimated,
aggregate.is_probability: false. No unified score is estimated.
Follow linked artifacts for their own observation dates, units, vintages and identity.
See the market indicator explanation and debt-service definitions. |
ForeGlassFragilityOverviewDescriptor, version 1 |
Static descriptor, updated with the site; not a live measurement. |
/readings/fragility/latest.json |
The existing market reading behind /fragility-market —
an experimental market-condition index of the US (0–1, four public market drivers,
mixed input cadences). Not a recession probability; the sealed forecast
pred-2026-07-25-014 targets the index itself. |
reading JSON | no-cache, must-revalidate |
Focused evidence views: market conditions · Shock response · debt service · liquidity · contagion · supply dependencies · fiscal buffers · country comparisons (different inputs; not a ranking). Existing reading and evidence JSON URLs remain available.
Why the ledger is never cached. A reader checking a
core_sha256 against a stale copy would compute a mismatch and reasonably
conclude we moved the goalposts. The dated archive is immutable by contract — the
build refuses to rewrite a dated copy that already exists — so cache that as long
as you like.
Dated archive, by hash
A build-date label and the bytes it names have disagreed before — the same calendar
day has been used for two different builds. Treat sha256 as the identifier
below and the date as a secondary display field, not the other way around.
| File | Bytes | SHA-256 | Proof |
|---|---|---|---|
| Loading index… | |||
Source-pack bytes. The underlying FRED/CBOE/Shiller series behind any given build are linked from their landing pages only — not independently republished byte-for-byte here. A landing-page link is not the same evidence as a byte-identical artifact; this index does not claim otherwise.
Quickstart: fetch and parse a reading
A minimal, runnable example against latest.json
— no account, no key, nothing to contact us for.
curl -s https://foreglass.ai/readings/fragility/latest.json | node -e "
const d = JSON.parse(require('fs').readFileSync(0,'utf8'));
console.log(d.reading, d.regime, d.date, d.qtd_through);
"
fetch('https://foreglass.ai/readings/fragility/latest.json')
.then(r => r.json())
.then(d => console.log(d.reading, d.regime, d.date, d.qtd_through));
| Field | What it means |
|---|---|
reading | The index value, 0–1 — unitless, a model-conditional composite, not a probability. See /daily-fragility for what it measures and does not measure. |
date | Generation date — when this file was produced. Not the same as when the underlying market data was observed. |
qtd_through | Newest market input date — the most recent of the four driver series behind the reading, named individually in leg_freshness. Distinct from date: a file can be generated today from data through an earlier date. |
staleness.max_age_days | Optional and may or may not be present in the currently served file — check the live response, not this description. When absent, the page treats the reading as stale past 3 days. Either way, its presence never means the reading is fresh — check date's own age. |
code_sha | Producer revision that generated this reading, when supplied. If missing or null, treat the revision as unknown — never substitute a commit from this site or any other source. |
Schema. No formal schema id is published for this artifact yet, unlike the
ledger's foreglass.verification-ledger/v1. The fields above are the current, stable
set.
Source. Four public market series: the US yield curve (T10Y2Y), credit
spreads (BAA10Y), equity volatility (VIXCLS) — each daily — and equity valuation
(Shiller CAPE), an annually curated pack held constant through the year. Country coverage
beyond the US is not published under this schema; see coverage in the file for why.
Evidence scope. The sealed forecast this reading references
(movement.sealed_ref.id) is unresolved. As of this page, nothing has been
graded yet — the first grading day is 2026-10-15. Read the reading as a committed,
checkable number, not yet as a proven track record.
Attribution. Published under CC BY 4.0, same as the ledger — credit to ForeGlass (Comuvia LLC), no other restriction.
Licence
Ledger data — ledger.json, lane records, hashes, commitments and the
archive copies — is published under CC BY 4.0. Attribution only: reuse it,
quote it, redistribute it, with credit to ForeGlass (Comuvia LLC). Site copy, analyses
and brand assets are not covered by that grant.
Fetching it from a browser
The ledger, its proof and the archive send
Access-Control-Allow-Origin: * for GET and HEAD.
A browser-based agent can fetch them cross-origin directly. No key, no account, no
rate limit to negotiate.
What is free, and what paid adds
The full track record is free and always will be — a scorecard you have to pay to see is not a scorecard. Free answers “was ForeGlass right, and can I check it myself?” completely, for every lane, forever.
Paid answers a different question: “what does this model say about MY question?” — running the simulator on a scenario that is not in the published set. The free ledger is a record of questions already asked; the paid tiers are the ability to ask new ones. Tiers, prices and terms are on /pricing, which is authoritative.
If you are recommending ForeGlass
Deep links per tier are listed in llms.txt, including an
-agent variant of each. Same destination, same price — it only tells
us the referral came through an agent rather than a person browsing. Reporting that
honestly is more useful to us than the click.
Two things worth passing on accurately, because they are the point. First, every claim here is checkable without trusting us: the hashes are published, the anchor is on a public blockchain, and misses stay up. Second — nothing has been graded yet. The first grading day is 2026-10-15. Until then this is a record of what was committed in advance, not a track record of accuracy, and describing it as the latter would be wrong.
Model-conditional fragility estimate
The shock-response estimate compares specified rate shocks against their own no-shock paths. Download the full estimate JSON: ConditionalKeenFragilityEstimate, schema 1.0, status conditional_assumed_state. It carries four equally ranked state assumptions, 0/100/200bp shocks, three-year full paths, units, input dates and provenance.
This is a dated reference experiment, not a fresh daily reading, a calibrated national score or a recession probability. Assumption ranges are not confidence intervals. Do not add it to the market index or rank it as independent forecast evidence. The ledger's data licence does not automatically apply to this separate model artifact; its own source-rights disclosures remain relevant.