{"title":"API Release Notes — ALETHEIA Safety Reference","canonical_url":"https://api.aletheia.holisticquality.io/api/release-notes","source_file":"CHANGELOG.md","data_changelog":"https://api.aletheia.holisticquality.io/api/changelog","rss_note":"An RSS/Atom feed is not yet published. Poll this endpoint with ?format=json and compare the `versions[0].date` field.","latest":{"date":"2026-10-03","title":"A value with no checkable source on file now says so: `unsourced_values`","body":"A compound response gains `unsourced_values`, the value paths of that record with no source document on file that states them. It is absent for a record with none, and a listed value is shown, not withdrawn. The safety viewer prints \"No checkable source on file yet\" beside those values. Nothing is removed.\n\n`Trace: D-955 (AC4a) · not yet deployed · 2026-10-03`"},"versions":[{"date":"2026-10-03","title":"A value with no checkable source on file now says so: `unsourced_values`","body":"A compound response gains `unsourced_values`, the value paths of that record with no source document on file that states them. It is absent for a record with none, and a listed value is shown, not withdrawn. The safety viewer prints \"No checkable source on file yet\" beside those values. Nothing is removed.\n\n`Trace: D-955 (AC4a) · not yet deployed · 2026-10-03`"},{"date":"2026-10-03","title":"A derived band now says so: a new `derived_markers` field","body":"A synthesis response gains `derived_markers`, naming what a context's band was derived from. A context whose refs are all such markers is `sources_scope: \"derived\"`; refs that match no entry fall back to the record-wide list (`record`). Nothing is removed.\n\n`Trace: D-955 (AC5, F-382) · not yet deployed · 2026-10-03`"},{"date":"2026-10-03","title":"Compound records can now say which group entries they belong to","body":"A new `group_memberships` field lists, for asbestos, beryllium, cadmium, chromium(VI) and nickel records, each instrument entry the record belongs to, with the entry's own text and the record's identity quoted beside it. Records outside those groups do not carry it.\n\n`Trace: D-913 (DD-09, AC7) · not yet deployed · 2026-10-03`"},{"date":"2026-10-03","title":"The old EC-number fields are gone from compound records: use `crossrefs.ec_number`","body":"`crossrefs.echa_ec`, `ec` and `einecs` are removed, with no alias (API 3.0.0). `crossrefs.ec_number` is the one store; where a record could not be given one, it is absent and the record says why. `year_reviewed`, deprecated since 2026-09-23, is removed; use `year_updated`.\n\n`Trace: D-913 (DD-09) · not yet deployed · 2026-10-03`"},{"date":"2026-09-30","title":"A not-found answer now says what absence means","body":"A response saying a compound, product or class is not in the ALETHEIA corpus now carries a `coverage_note`: no record here is not a safety verdict. So do a search with no results and the badge (header and image title). Additive: no hazard value or band moved. The version stays 2.2.0 and moves to 2.3.0 with the `year_reviewed` alias removal.\n\n`Trace: D-905 (DD-02, F-311) · not yet deployed · 2026-09-30`"},{"date":"2026-09-27","title":"Materials figures checked against EPA, FDA, WHO and EU sources; carcinogen lines follow the ingredients","body":"Figures materials records attribute to EPA, FDA, NIOSH, WHO and the EU were checked against archived regulator text and corrected in both directions; figures the named authority does not publish carry a dated withdrawal marker. \"Carcinogenicity:\" lines now follow the ingredients' IARC groups, mostly adding one, twice removing one. Withdrawal markers no longer lower quality badges.\n\n`Trace: D-867 (close) · deploy bdcf55f4c · 2026-09-27`"},{"date":"2026-09-26","title":"Workplace exposure limits read against the regulator's own text","body":"Exposure limits on materials and some compound records were read against archived OSHA, NIOSH and EU text and corrected in both directions, among them hexavalent chromium, mercury's ceiling and cadmium's EU limit. IARC lines on a few compound pages now cite the monograph volume they rest on. Benomyl's hazard labels now come from its own EU harmonised entry, not carbendazim's.\n\n`Trace: D-867 (tables 6 to 12) · D-897 · D-820 · D-834 wave 3 · deploys 8d936ace7, 52c375dd8 · 2026-09-26`"},{"date":"2026-09-25","title":"\"No major regulatory flags\" only when no verified listing applies; wrong-source IARC groups withdrawn","body":"Pages print \"No major regulatory flags\" only when no verified listing applies. Stockholm POP listings were checked against the Convention: missing POPs added, false ones removed. IARC groups resting on wrong-source citations were withdrawn, so **some warnings are weaker**; IRIS values and mislinked ingredients were corrected both ways, and aletheia now publishes a corrections page.\n\n`Trace: D-841 · D-851 · D-896 · D-820 (A18) · D-872 · D-873 · D-874 · D-839 · D-887 · D-888 · D-889 · D-890 · D-892 · D-893 · D-895 · D-855 · deploys 5ceba9169, 02f66175e · 2026-09-25`"},{"date":"2026-09-23","title":"The year filter and export column now say \"year updated\", not \"year reviewed\"","body":"The value was never a review year: it now comes from each record's most recent revision\nand is served as `year_updated`, last column in both CSV layouts. `year_reviewed` stays\nas a deprecated alias with the same value through 2.2.x and is removed at 2.3.0.\n\n`Trace: D-864 · deploy 7c276ab99 · 2026-09-23`"},{"date":"2026-09-21","title":"Compounds show the IARC group the record already held, and four say under what condition","body":"Thirty-three compounds carried an IARC classification no page displayed; they now show\nit, and 85 risk levels are new or stronger, 28 in child, infant, pregnancy or teen\ncontexts, none weaker. Four state IARC's condition verbatim. The listing shows each\nentry's own risk band, and hazard labels dropped 191 unsourced codes for 91 sourced, no\nwarning lost.\n\n`Trace: D-836 AC2a · D-836 AC2c · D-834 wave 1 · deploy 4d8f68f33 (2026-09-22) · 2026-09-21`"},{"date":"2026-09-20","title":"A \"not likely\" cancer verdict no longer softens a non-cancer band; this page is now one short entry per release","body":"A negative carcinogenicity finding was counted as low-hazard evidence, so 152\nserved risk levels are now **stronger warnings**, 68 in child, infant or pregnancy\ncontexts. Glyphosate's child band moves moderate to severe. Five compounds that\nread \"No major regulatory flags\" now name their IARC group, one **Group 1**, and\ndose-response minima that mixed units are withdrawn.\n\n`Trace: D-830 · D-832 · D-836 (5 of 38) · D-833 · deploy 8715a0994 · 2026-09-20`\n\n---"},{"date":"2026-09-20","title":"GHS hazard labels now say where they come from; API contract 2.1.0","body":"Chips on the compare page now read `harmonised (EU CLP Annex VI)` or\n`notified by N companies (ECHA C&L)`, so a legally harmonised classification is\ndistinguishable from a self-notified one. Glyphosate's carcinogenicity summary\nnow attributes each verdict to the body that issued it. Three static compound\npages were a revision behind, **two of them under-warning a child band**.\n\n`Trace: D-831 · D-827 · D-828 · deploy 9efe5cfa5 · 2026-09-20`\n\n---"},{"date":"2026-09-19","title":"Class-typed toxicity defaults withdrawn; placeholder bands replaced","body":"An LD50 or NOAEL that was a class default rather than a measurement is now\nwithdrawn rather than served as data; 21 measured values replace them. Two\nacute-toxicity figures became **sharper warnings** — allyl isothiocyanate and\nmethyl salicylate, a class default replaced by a measured LD50. A context with\nno magnitude says so instead of resolving to a middle band.\n\n`Trace: D-821 · D-829 · deploy 603d37b9d · 2026-09-19`\n\n---"},{"date":"2026-09-18","title":"**Breaking: API 2.0.0** — `hazard_profile` removed, replaced by `hazard_class`","body":"`hazard_profile` is gone. The same information is now split across\n`hazard_class`, `hazard_class_basis`, `hazard_detail` and `hazard_summary`, so a\nclass, its warrant and its detail are separate fields. Compound pages that had\nrendered `[object Object]` render the class. Citation labels and withdrawals\nalso ship.\n\n`Trace: D-818 · D-817 · D-820 · deploy fe1f3b410 · 2026-09-18`\n\n---"},{"date":"2026-09-18","title":"Page citations render; retired hostnames removed from public copy","body":"Per-record citations now render on published pages with their scope stated\n(record-wide or per-context). Links to retired hostnames are gone from the\npublic properties. Development and cache files that had been reachable now\nreturn 404.\n\n`Trace: D-808 · D-809 · D-801 · deploy 7c490a630 · 2026-09-18`\n\n---"},{"date":"2026-09-15","title":"**Anonymous tier no longer returns structure or full citations**","body":"The public projection strips `smiles`, `inchi`, `inchi_key`, computed\ndescriptors and full citation objects; records carry a `_tier` marker. An\nauthenticated key returns them as before. `exact_mass` and `monoisotopic_mass`\nare published by operator ruling.\n\n`Trace: Stage 1 · deploy 3eb20f5b9 · 2026-09-15`\n\n---"},{"date":"2026-09-14","title":"Six records that denied an IARC evaluation now carry it","body":"Six records stated that IARC had not evaluated a substance the published list\ndoes carry — one of them Group 1 — and now carry the evaluation, on the records\nand on the pages derived from them together. The API's release-notes endpoint\ncaught up with this file in the same window.\n\n`Trace: D-797 · deploy 68cc3ed47 · 2026-09-14`\n\n---"},{"date":"2026-09-10","title":"Published coverage figure re-measured and dated: 97.4%, replacing an undated 100%","body":"The coverage page carried **100%** with no assessment date; re-running the same\npredicate today gives **97.4%**, and every figure now carries the date it was\nmeasured. The earlier number was not wrong when published — it was undated,\nwhich let it read as current. Regulatory milestones whose effective date has\npassed now read as in force.\n\n`Trace: D-733 · D-742 · deploys e8ed21f34 (2026-09-07), 315285787 · 2026-09-10`\n\n---"},{"date":"2026-08-29","title":"Chemical-identity repair: CAS, formula, weight and structure","body":"The long-running identity remediation first disclosed in v1.4.3/v1.4.4 is\nlargely closed. Each correction was anchored **by name and by CAS separately**\nand accepted only where both resolve to the same compound. Where a value could\nnot be resolved it was nulled or registered as unresolved, **never replaced with\na plausible guess**.\n\n`Trace: D-450 · D-454 · D-455 · D-473 · D-474 · D-504 · D-505 · D-527 · D-595 · deploys 066fb3451 → 81303c28d · 2026-07-31 → 2026-08-29`\n\n---"},{"date":"2026-08-27","title":"IARC classification reconciliation: every stated group checked against IARC's own list","body":"Every IARC group this corpus states was reconciled against IARC's published\nList of Classifications. **Corrections run in both directions, and several were\nunder-warns** — substances served as unclassified or in a lower group where IARC\nhad classified them higher. A non-existent category and groups captured out of\nsentences *denying* an evaluation were removed.\n\n`Trace: D-427 · D-429 · D-512 · D-514 · D-524 · D-561 · D-562 · D-582 · D-583 · D-594 · D-634 · deploys 030d9e1dd → 6520ce236 · 2026-07-24 → 2026-08-27`\n\n---"},{"date":"2026-08-23","title":"Risk-band vocabulary normalised at source","body":"Six spellings for what are two bands are now normalised at source, so the API,\nthe JSON viewer and the published pages read the same canonical strings. Five\npublished pages had been painting a **real authored hazard band in the grey\nreserved for `unknown`** and now render the correct colour. **If you match band\nstrings exactly, check your mapping.**\n\n`Trace: D-521 · deploy d7cb675b2 · 2026-08-23`\n\n---"},{"date":"2026-08-21","title":"Citation and attribution integrity","body":"Wrong-compound attributions were repointed and a standing detector shipped so\nthe class is caught rather than re-audited. An **invented federal case name**\nserved for a real ruling was corrected, along with a vacated holding served as\noperative law, citations pointing at unrelated papers, and a statistic whose\nnumber was right and whose scope attributes were all wrong.\n\n`Trace: D-441 · D-442 · D-518 · D-567 · D-619 · deploys 714dc23a3 → 6ff3b8733 · 2026-07-30 → 2026-08-21`\n\n---"},{"date":"2026-08-12","title":"`/api/playground` and `/api/badge`: every corpus band now maps to a display class","body":"The band→display maps were hand-listed and did not cover every band the corpus\nemits, so an unmapped band fell through to the **bottom visual rung** — the most\nsevere substances rendered as the least severe. Both maps are now table-driven\nover every band, and Asbestos, PFOA and Formaldehyde render as critical. The\nband *word* was already correct and is unchanged.\n\n`Trace: D-544 · D-545 · deploy 8cc88a437 · 2026-08-12`\n\n---"},{"date":"2026-08-09","title":"New on published compound pages: `display_risk_levels`","body":"Published pages rendered the curated band only, so where synthesis resolved a\n*higher* band the page showed the lower value. The served compound index now\ncarries `display_risk_levels` (the higher of the two) and `display_risk_source`\n(which side won). **The rule can only raise a displayed band, never lower one**;\n`risk_levels` is not mutated and no API response shape changed.\n\n`Trace: D-526 · deploy 57afd335c · 2026-08-09`\n\n---"},{"date":"2026-08-07","title":"Risk-synthesis admissibility: what a classification is allowed to decide","body":"Four corrections to which regulatory classifications the engine accepts and what\nit accepts them *for* — including EPA's pre-1996 letter grades, which were\nsilently dropped before synthesis. **A carcinogenicity classification can no\nlonger decide a cat, dog or wildlife context.** Served bands move in **both**\ndirections; these are correctness fixes, not a uniform tightening.\n\n`Trace: D-499 · D-500 · D-501 · D-506 · D-509 · D-514 · deploys e798ee1fc → bf2db4c5f · 2026-08-05 → 2026-08-07`\n\n---"},{"date":"2026-07-19","title":"Build markers on `/api/health`, no key required","body":"`GET /api/health` now returns `commit` and `dataset_version`, so an integration\ncan tell which build and which data version it is talking to — previously only\nthat the service was up. Useful for pinning a reproducible run or confirming a\ndeploy rolled out. Only those two values are exposed.\n\n`Trace: D-398 · v1.7.0 · 2026-07-19`\n\n---"},{"date":"2026-07-06","title":"v1.7.0: Regulatory Change Calendar across every covered substance","body":"`GET /api/regulatory-status?view=calendar` aggregates every forward-looking\nchange across all substances into one date-sorted list, narrowable by\njurisdiction and date. Coverage widens to 11 regulated substances across US, EU\nand California. The response states its own denominator, and a proposed change\nis never returned as an in-force value.\n\n`Trace: D-340 · D-341 · v1.6.0 → v1.7.0 · 2026-07-06`\n\n---"},{"date":"2026-07-06","title":"v1.6.0: a temporal `governance` view on `/api/regulatory-status`","body":"Every cell now carries `governance_timeline` (the in-force value plus scheduled\nor pending ones, each with a lifecycle status and effective date) and a computed\n`governance` view of `{ current, upcoming }`. `?as_of=YYYY-MM-DD` resolves that\nview as of any date. **A non-confirmed value is only ever returned in\n`upcoming`**, never as the current limit.\n\n`Trace: D-331 · v1.5.0 → v1.6.0 · 2026-07-06`\n\n---"},{"date":"2026-06-30","title":"v1.5.0: heavy-metals regulatory-status endpoint","body":"New `GET /api/regulatory-status` gives the governing threshold — if any — for a\nheavy metal in baby-food matrices across US, EU and California, with the legal\nforce each carries and where no governing threshold exists at all. Requires a\nDeveloper or Pro key. `available_contexts`, already live, is now documented on\nthe compound response.\n\n`Trace: D-297 · v1.4.5 → v1.5.0 · 2026-06-30`\n\n---"},{"date":"2026-05-22","title":"v1.4.5: pricing-surface coherence and legal containment","body":"A storefront price change had been missed by the API code across three\nsuccessive releases, and a second copy of the tier prices inside the admin\ndashboard was showing wrong figures. Prices now come from one place. Legal\ncontainment hardening ships alongside.\n\n`Trace: MK #41 · MK #42 · v1.4.4 → v1.4.5 · 2026-05-22`\n\n---"},{"date":"2026-05-19","title":"v1.4.4: chemical-identity corrections across 66 records","body":"Name-anchored corrections — resolved through PubChem **by name**, never through\nthe suspect cross-reference on the record being repaired — landed across two\nadjudicated batches. Data only: no API contract, code or middleware change. The\npublic JSON viewer is resynced by this release.\n\n`Trace: SCI-DAT-01 · v1.4.3 → v1.4.4 · 2026-05-19`\n\n---"},{"date":"2026-05-19","title":"v1.4.3: export safeguard for compounds under identity review","body":"Structural-identity fields on the bulk export could carry a different\ncompound's structure for records under chemical-identity review. Those records\nnow carry an advisory field on the export marking them as under review. No\nbreaking contract change; `safety.holisticquality.io` is not affected.\n\n`Trace: SCI-DAT-01 · v1.4.2 → v1.4.3 · 2026-05-19`\n\n---"},{"date":"2026-05-16","title":"v1.4.2: identity corrections, edge caching, and a rebrand","body":"Thirty-three PubChem-verified identity corrections landed on records that had\nbeen serving a different compound's structure. `/api/compound/{id}` becomes\nedge-cacheable for unwatched compounds. The product name changes from \"Safety\nIntelligence\" to **\"Safety Reference\"**.\n\n`Trace: SCI-DAT-01 · PC-2 · v1.4.1 → v1.4.2 · 2026-05-16`\n\n---"},{"date":"2026-05-12","title":"`POST /api/compounds/batch` now listed on RapidAPI","body":"The POST batch endpoint is exposed on the rebuilt RapidAPI listing. Subscribers\nwho need relief from URL length limits on large ID lists can now send a JSON\nbody instead.\n\n`Trace: RAPIDAPI-L5 · 2026-05-12`\n\n---"},{"date":"2026-05-12","title":"v1.4.1: `methodology_note` was being dropped from `/api/product/{id}`","body":"v1.4.0 wrote `methodology_note` for every synthesised product, but an explicit\nfield allowlist in the response shaper omitted it, so the field was silently\ndropped before serialisation. It now surfaces.\n\n`Trace: v1.4.0 → v1.4.1 · 2026-05-12`\n\n---"},{"date":"2026-05-12","title":"v1.4.0: data expansion and audit-closure batch","body":"Every product synthesis response now discloses, in a paragraph, that its route,\nduration and frequency multipliers are ALETHEIA-calibrated heuristics informed\nby published exposure handbooks — engineering heuristics, not measured values.\nA large batch of audit findings closes alongside. The `aletheia-safety` SDK\nships v0.9.0 with this release.\n\n`Trace: DEPLOY-PLAN-2026-05-12 · v1.3.x → v1.4.0 · 2026-05-12`\n\n---"},{"date":"2026-05-07","title":"SCI-DAT-02 Phase 4: synonym decontamination across 60 records","body":"Records corrected in Phase 2 still carried synonym lists stamped from the wrong\nmolecule during the window the wrong cross-reference was active. Those lists are\nnow cleared or rebuilt. Data only; lands at the next deploy.\n\n`Trace: SCI-DAT-02 Phase 4 · 2026-05-07`\n\n---"},{"date":"2026-05-07","title":"SCI-DAT-02 Phase 2: 59 wrong-cross-reference corrections","body":"Fifty-nine compound records now carry the correct PubChem cross-reference and\nthe structure, formula and mass fields derived from it, where they had carried\nanother compound's. Triaged by InChIKey prefix. Data only; no API behaviour\nchange.\n\n`Trace: SCI-DAT-02 Phase 2 · 2026-05-07`\n\n---"},{"date":"2026-05-07","title":"SCI-DAT-01 Gap 2: 13 compounds re-resolved against PubChem","body":"Thirteen records carried structure fields contaminated by a wrong-CID batch\nmerge from 2026-03-22 and were re-resolved. Plutonium-239's wrong cross-reference\nwas corrected in the same pass. Data only.\n\n`Trace: SCI-DAT-01 Gap 2 · 2026-05-07`\n\n---"},{"date":"2026-05-07","title":"Methylmercury monograph and cancer-site correction","body":"Following an accuracy audit, methylmercury's IARC monograph reference and the\ncancer site it names were corrected, and the chemical-identity contamination\ntriage that became SCI-DAT-01 was opened. Subscription lifecycle handling also\nships.\n\n`Trace: sci-verify 2026-05-05 · SCI-DAT-01 · 2026-05-07`\n\n---"},{"date":"2026-04-27","title":"Batch limits aligned with the advertised plan configuration","body":"The public tier gains batch access and the per-tier batch caps rise, so the\nAPI's enforced behaviour matches what the marketplace already advertised to\nsubscribers. The synthesis cap is unchanged.\n\n`Trace: OpenAPI 1.4.0 → 1.5.0 · 2026-04-27`\n\n---"},{"date":"2026-04-27","title":"Marketplace listing v2.2: source transparency and a sample response","body":"The marketplace listing gains source transparency, a sample response and\nonboarding polish. Discovery surface only — no endpoint or response shape\nchanged.\n\n`Trace: OpenAPI 1.3.0 → 1.4.0 · 2026-04-27`\n\n---"},{"date":"2026-04-26","title":"Postman API Network listing; playground name search fixed","body":"ALETHEIA is now a public workspace on the Postman API Network, with curated\ncollections including a five-step onboarding to a real `200 OK`. Name search in\nthe playground is fixed.\n\n`Trace: 2026-04-26`\n\n---"},{"date":"2026-04-23","title":"RapidAPI launch","body":"ALETHEIA Safety Reference is listed on RapidAPI with a free tier and paid plans,\nplus an enterprise tier by arrangement.\n\n`Trace: 2026-04-23`\n\n---"}]}