Sustainability Data Reference Gateway

A reference deployment of /.well-known/sustainability-data (draft-besleaga-sustainability-wellknown).

This gateway serves one conformant declaration per reporting subject at /{domain}/.well-known/sustainability-data, so the format can be tested against real, sourced disclosures before organizations publish their own. In real use the declaration lives on the subject's own origin; a gateway only demonstrates and tests the format.

Please read. Declarations about third parties are ILLUSTRATIVE MAPPINGS the gateway operator read from each organization's own published report, named in methodology-uri; no figure is estimated. They are not reviewed, authorized or endorsed by those organizations, and this gateway is not an authoritative source for them. Names ending .example are synthetic.

How this gateway produces a conformant document Heterogeneous source data passes through adapters, unit and period normalization, and schema validation, and is served over HTTPS at /.well-known/sustainability-data with the media type application/sustainability-data+json. Sources files, APIs, exporters Adapters per-source mapping Normalize units, period, reporting subject Validate CDDL and JTD schemas Serve HTTPS, ETag, conditional GET GET /.well-known/sustainability-data 200 → Content-Type: application/sustainability-data+json · X-Content-Type-Options: nosniff
Every declaration below is produced by this path. The media type and the HTTPS requirement are those of the draft; a deployment kept on the generic application/json type is still served, and flagged as such.

Subjects served (20)

Subjects served by this gateway
EndpointReporting subjectPeriodMethodProvenance
automattic.com sourced Automattic Inc. (data centre operations) (organization) 2020 hardware-estimated source document
data file
cloud-demo.example synthetic t-7f3a9c41 (tenant) 2025 cloud-billing methodology
data file
commission.europa.eu sourced European Commission (organization) 2024 third-party-modeled source document
data file
eca.europa.eu sourced European Court of Auditors (organization) 2024 third-party-modeled source document
data file
eea.europa.eu sourced European Environment Agency (organization) 2024 third-party-modeled source document
data file
ema.europa.eu sourced European Medicines Agency (organization) 2024 third-party-modeled source document
data file
go.eco sourced Big Room Inc. (.eco registry) (organization) 2024-10-01T00:00:00Z/2025-10-01T00:00:00Z third-party-modeled source document
data file
hetzner.com sourced Hetzner Online GmbH (organization) 2024 third-party-modeled source document
data file
hmrc.gov.uk sourced HM Revenue and Customs (organization) 2025-04-01T00:00:00Z/2026-04-01T00:00:00Z third-party-modeled source document
data file
home.cern sourced CERN (organization) 2024 third-party-modeled source document
data file
infomaniak.com sourced Infomaniak Group SA (organization) 2024 third-party-modeled source document
data file
mozilla.org sourced Mozilla Foundation and Mozilla Corporation (organization) 2025 third-party-modeled source document
data file
retailer.example synthetic retailer.example (organization) 2025 third-party-modeled methodology
data file
saas-platform.example synthetic saas-platform.example (service) 2025 hardware-metered methodology
data file
scottlogic.com sourced Scott Logic Limited (organization) 2025 third-party-modeled source document
data file
sfc-network.example synthetic sfc-network.example (service) 2025 third-party-modeled methodology
data file
sfc-operator.example synthetic sfc-operator.example (origin) 2025 hardware-metered methodology
data file
tenant-demo.example synthetic Tenant Demo Ltd (organization) 2025 third-party-modeled methodology
data file
thegreenwebfoundation.org sourced Green Web Foundation (organization) 2023 third-party-modeled source document
data file
wikimedia.org sourced Wikimedia Foundation (organization) 2024 third-party-modeled source document
data file

Adapter demonstrations (14)

One subject per upstream-backed adapter: the eight of the published sustainability-wellknown-publisher package, and the adapters that live in this gateway: DIST, the IETF GREEN power-and-energy YANG model and, experimentally, the SFC ledger bridge in two profiles with two relays of the profile's reference declarations (all SFC subjects signed with a public test key), so every adapter runs end to end here. Live subjects fetch a real upstream daily (only where the license permits attributed republication; the attribution is in the document). Replay subjects run the same adapter code against a recorded response, because no free legal live access exists; their figures are synthetic and say so in the document. All use reserved .example names and describe no real organization.

Adapter demonstrations
EndpointAdapterInput → declarationUpstream & attributionPeriod
carbontxt-demo.example live carbontxt-api (LIVE GWF validator API, daily) input → declaration · live upstream (CC BY 4.0)
The Green Web Foundation carbon.txt validator API's response for the Foundation's own carbon.txt, as recorded on 2026-07-30: the parsed file with its real disclosure links.
GWF carbon.txt validator API (free key) / recorded carbon.txt
carbon.txt self-published by its organization; validator by GWF
2025
climatiq-demo.example replay climatiq (synthetic response in Climatiq's documented shape, replay) input → declaration
An estimate response in the shape of Climatiq's published API reference. The numbers are synthetic and none of it is Climatiq data: Climatiq's terms restrict redistribution, so nothing it returns is relayed here.
Climatiq estimate API (replay only here: its terms restrict redistribution)
synthetic figures; no Climatiq data is relayed
2026-10
co2js-demo.example live co2js (local SWD model, live Greencheck, daily) input → declaration
The only input CO2.js needs is a byte count: one gigabyte, so the result is a score per gigabyte. The size of one crawl of this gateway, measured by serializing every document it serves when it starts, is given for scale.
CO2.js locally (Ember data) + GWF Greencheck
CO2.js Apache-2.0; Ember CC BY 4.0; GWF Green Domains ODbL
2026-10
dist-demo.example live dist (LIVE Green Web Foundation dist.json, daily) input → declaration · live upstream (CC BY 4.0)
The Green Web Foundation's own dist.json, as recorded. In live mode the gateway reads the current file daily; the live link shows it.
Green Web Foundation dist.json (DIST v0.0.1)
Green Web Foundation, CC BY 4.0
2023
grid-intensity-demo.example live computed (LIVE NESO grid intensity, daily) input → declaration · live upstream (CC BY 4.0)
The one value this demonstration reads from the NESO response, as recorded on 2026-07-30. The full response is not stored; the live link returns the current one, which is what the live mode reads.
NESO Carbon Intensity API (api.carbonintensity.org.uk)
NESO Carbon Intensity API, CC BY 4.0
2026-10
kepler-demo.example replay kepler-prometheus (recorded fixture, replay mode) input → declaration
A Prometheus instant-query response for Kepler's energy counters, in the shape the Prometheus HTTP API returns. The figures are synthetic: no public Prometheus with Kepler metrics exists to record from.
Kepler energy counters via Prometheus (no public instance; replay)
synthetic figures; recorded Prometheus query response
2025
ms-sustainability-demo.example replay ms-sustainability (retired OData shape, replay) input → declaration
Two pages of a Microsoft emissions API response, in the shape of the retired tenantemissions endpoint. The figures are synthetic.
MS Cloud for Sustainability (preview API retired 2025-05-30; replay)
synthetic figures; shape per the retired tenantemissions API
2025
salesforce-nzc-demo.example replay salesforce-nzc (documented SOQL shape, replay) input → declaration
A SOQL query result over Net Zero Cloud's annual emissions inventory object, with the field names of the Net Zero Cloud developer guide. The figures are synthetic.
Salesforce Net Zero Cloud (30-day trial orgs exist; replay here)
synthetic figures; field names per NZC developer guide
2025
sfc-ledger-demo-2.example replay sfc-ledger-bridge (SFC profile 2.0, recorded ledger read, replay, experimental) input → declaration
A recorded ledger read (SFC profile 2.0 excerpt, format 2) of a synthetic network: three operators, fifteen months of signed EnergyAttested and CarbonAttested events, their Registry entries and the registrar key. Every figure is invented; every signature uses the public RFC 8032 test key. The declaration's ledger-evidence-2 extension points here, so a reader can run the deep check.
SFC profile 2.0 attestation events of a three-operator network (recorded synthetic read; no public ledger; replay)
synthetic figures; events, Registry and declaration signed with the public RFC 8032 test key
2025
sfc-ledger-demo.example replay sfc-ledger-bridge (recorded ledger excerpt, replay, experimental) input → declaration
A recorded excerpt of a synthetic ledger: one operator's signed monthly EnergyAttested and CarbonAttested events for January to April 2026, its Registry key and its signed allocation of one retired tonne. Every figure is invented; every signature uses the public RFC 8032 test key. The declaration's ledger-evidence extension points here, so a reader can run the deep check.
SFC ledger profile 1.2 attestation events (recorded synthetic excerpt; no public ledger; replay)
synthetic figures; events and declaration signed with the public RFC 8032 test key
2026-04
sfc-network-2.example replay sfc-reference-declaration (SFC profile 2.0 example, replay) input → declaration
The recorded ledger read this reference declaration recomputes from (the three-operator network of the SFC 2.0 test vectors). Every figure is invented.
SFC profile 2.0 reference network declaration (sfc-compliance/examples; synthetic)
synthetic figures; signed with the public RFC 8032 test key
2025
sfc-operator-2.example replay sfc-reference-declaration (SFC profile 2.0 example, replay) input → declaration
The recorded ledger read this reference declaration recomputes from (the three-operator network of the SFC 2.0 test vectors). Every figure is invented.
SFC profile 2.0 reference operator declaration (sfc-compliance/examples; synthetic)
synthetic figures; signed with the public RFC 8032 test key
2025-01
watershed-demo.example replay watershed (documented footprint shape, replay) input → declaration
A footprint summary in the shape of Watershed's API documentation, which is open to customer keys only. The figures are synthetic.
Watershed API (customer-only keys, no sandbox; replay)
synthetic figures; shape per api-docs.watershed.com
2025
yang-energy-demo.example replay yang-power-energy (recorded RFC 7951 snapshots, replay) input → declaration
Two RFC 7951 JSON snapshots of the ietf-power-and-energy data model, read over RESTCONF at the start and end of the period; the energy is the difference of the counters. The figures are synthetic: no public device implements the working-group draft.
ietf-power-and-energy over RESTCONF (IETF GREEN WG draft; no public device; replay)
synthetic figures; data model per draft-ietf-green-power-and-energy-yang-04
2025

Wire-format examples (42)

Every case in the specification's example set, served live, with synthetic figures under reserved .example names. A file that holds a series answers a request without parameters with its newest object, or with the whole array where the objects belong together; a case that declares capabilities: extended answers start, end, target and granularity with the objects it holds that satisfy them (an empty array when none does), and a case that declares basic ignores them.

Wire-format examples
EndpointCaseShapePeriodDemonstrates
basic.example example Basic response
target example.com
source file
object 2026-02 An origin-wide monthly report in the Basic shape, with explicit units.
minimal.example example Minimal document
target minimal.example
source file
object 2025 The smallest conformant object: the seven mandatory members and a disclosure-uri. It carries no metric, so the evidence link is what the at-least-one rule requires.
extended.example example One day, path target (Extended)
target /app/storage
source file
object
?start=2026-03-20T00:00:00Z&end=2026-03-21T00:00:00Z&granularity=daily: array (1)
2026-03-20 A whole calendar day for a path-scoped target, declaring extended capabilities: a request that names a parameter is answered with an array, here of one object, or with [] when the object does not satisfy it.
partial.example example Partial reporting
target partial.example
source file
object 2026-03 Omission as the only not-reported mechanism. The source file omits carbon-unit; the served document carries the materialized default (gCO2e) — the pipeline resolving the draft's default-unit rule.
origin-annual.example example Origin-wide annual report
target example.com
source file
object 2025 A calendar-year report for a whole origin, from cloud-billing data.
signed.example example Signed declaration, internationalized origin
target xn--grn-ioa.example
source file
object 2025 The embedded signed member: an Ed25519 JWS over the object without signed, cty sustainability-data+json, public key in the header as jwk. It verifies, and proves only integrity: a key carried in the header is as self-asserted as the figures. It was signed with the public test key of RFC 8032, which protects nothing, so it verifies from its header and fails against any pinned key, as it should. The origin is an internationalized host, so target and every URI carry its A-label, while provider is UTF-8 text.
organization.example example Organization report
target Example Cloud Services, Inc.
source file
object 2025 An organization-level annual report with GHG Protocol scopes and no energy figure.
organization-trend.example example Yearly trend, Basic service
target Example Annual Corp (example.org)
source file
array (4) 2025 A multi-year trend file whose document declares capabilities:basic. The parameterless response is the array of every held year; a Basic subject ignores every parameter.
comprehensive.example example Comprehensive organization report
target Greenhost Data Centres Ltd
source file
object 2025 Every optional member the format defines that fits an organization, and six https-keyed extensions for what it does not define: ISO/IEC 30134 facility KPIs, water, waste, hardware circularity, refrigerant and generator emissions, and renewable procurement. The extension names are under the example publisher's own reserved domain and their definitions are illustrative.
removals.example example Negative scope (removals netted)
target Upland Data Co-operative Ltd
source file
object 2025 A scope member MAY be negative where the accounting method nets removals; carbon-footprint stays gross, so the scopes no longer sum to it and the methodology document explains why. Also shows an attestation link for the removals claim; the source file omits energy-unit, and the served document carries the materialized kWh.
product.example example Product
target Example Router Model RX-100 (GTIN 04012345678901)
source file
object 2025 A physical product as the reporting subject (carbon footprint of one unit).
service.example example Service
target app.saas.example
source file
object 2025 A hosted application service as the reporting subject.
tenant.example example Cloud tenant
target tenant-acme-01.cloud.example
source file
object 2025 A single cloud tenant as the reporting subject.
device.example example Hardware device
target edge-node-014.edge.example
source file
object 2025 A metered edge device as the reporting subject.
data-source.example example Data source / feed
target https://metrics.example/feeds/grid-sensor-network
source file
object 2025 A published data feed as the reporting subject.
upstream-organization.example example Organization with upstream providers
target Nordwind Logistics GmbH
source file
object 2025 The upstream member: an organization naming the tenant-scoped declaration of the cloud provider its figures partly derive from, with role:cloud. The URI is a reserved .example name, so the chain is illustrative — tenant-demo.example names a declaration this gateway really serves.
upstream-tenant.example example Tenant-scoped upstream declaration
target nordwind
source file
object
?start=2025-01-01T00:00:00Z&end=2026-01-01T00:00:00Z&granularity=yearly: array (1)
2025 The other end of the same pair: what an upstream publishes about ONE customer — target-type:tenant and an identifier of the provider's choosing in target. It declares extended capabilities, so a request that names a parameter is answered with an array.
upstream-multiple.example example Organization with several upstreams
target Brightpath Software Ltd
source file
object 2025 Three upstream entries, each compared on its own: cloud and cdn name tenant-scoped declarations about this customer, which a consumer can compare; electricity names the supplier's own totals, for which no comparison is defined. Reserved .example URIs, so the chain is illustrative.
yearly.example example Monthly series (Extended)
target example.com
source file
object (the file holds 12; the newest is served)
?start=2025-01-01T00:00:00Z&end=2026-01-01T00:00:00Z&granularity=monthly: array (12)
2025-12 Twelve whole months of 2025; a request that names no parameter gets the latest month. ?start=2025-01-01T00:00:00Z&end=2026-01-01T00:00:00Z&granularity=monthly returns the twelve.
yearly-monthly-target.example example Monthly series, path target (Extended)
target /api/v1
source file
object (the file holds 2; the newest is served)
?start=2026-01-01T00:00:00Z&end=2026-03-01T00:00:00Z&granularity=monthly: array (2)
2026-02 A short monthly series for a path-scoped target; no parameter gets the latest month, ?granularity=monthly the months held.
daily-trend.example example Daily series, device (Extended)
target lora-gw-07.fieldnet.example
source file
object (the file holds 3; the newest is served)
?start=2026-03-29T00:00:00Z&end=2026-04-01T00:00:00Z&granularity=daily: array (3)
2026-03-31 ?start=2026-03-01T00:00:00Z&end=2026-04-01T00:00:00Z&granularity=daily returns every day held, here the three days since the device was commissioned; watt-hours and grams. The server returns what it holds and sums nothing: the three days are not March.
two-targets.example example One array, two targets, a local accounting month
target example.com
source file
array (2)
?start=2026-02-28T16:00:00Z&end=2026-03-31T16:00:00Z&granularity=monthly: array (2)
2026-03-01T00:00:00+08:00/2026-04-01T00:00:00+08:00 An origin and a path of that origin, each for March 2026 in the +08:00 offset in which the operator keeps its accounts; both bounds carry the offset. ?target= selects one, and the two objects are ordered by the instant of their start, then end, then target.
accounting-pair.example example Location-based and market-based
target Retail Pair plc
source file
array (2) 2025 Two objects for one organization and year that differ in carbon-accounting: the location-based and the market-based figure. A Basic subject serves both, and neither is the other's total.
functional-units.example example Twelve functional units
target api.functional-units.example
source file
array (12) 2025 One service and year, twelve objects, one for each functional unit of the draft with its score.
unit-grid.example example Twelve months in twelve unit pairs (Extended)
target unit-grid.example
source file
object (the file holds 12; the newest is served)
?start=2025-01-01T00:00:00Z&end=2026-01-01T00:00:00Z&granularity=monthly: array (12)
2025-12 Every month states the same energy and carbon in its own pair of units (Wh, kWh, MWh, GWh and gCO2e, kgCO2e, tCO2e), so a consumer converts before it adds.
dst-month.example example A month across a change of clock
target Paris DC 1
source file
object 2025-03-01T00:00:00+01:00/2025-04-01T00:00:00+02:00 March 2025 for a facility in Paris: the start is +01:00 and the end +02:00, so the period is 743 hours and still a whole calendar month.
dst-days.example example A 23-hour and a 25-hour day (Extended)
target Paris DC 1
source file
object (the file holds 2; the newest is served)
?start=2025-03-29T23:00:00Z&end=2025-10-26T23:00:00Z&granularity=daily: array (2)
2025-10-26T00:00:00+02:00/2025-10-27T00:00:00+01:00 The two days on which the clocks of Paris changed; each is a whole calendar day in its own offsets.
local-days.example example Local accounting days (Extended)
target Sensor 12
source file
object (the file holds 3; the newest is served)
?start=2026-03-17T16:00:00Z&end=2026-03-20T16:00:00Z&granularity=daily: array (3)
2026-03-20T00:00:00+08:00/2026-03-21T00:00:00+08:00 Three whole days kept in the +08:00 offset of the device's site; a range in UTC selects them by instant.
mixed-offsets.example example Two offsets in one array (Extended)
target /americas
source file
array (2)
?start=2026-03-01T00:00:00Z&end=2026-04-01T05:00:00Z&granularity=monthly: array (2)
2026-03-01T00:00:00-05:00/2026-04-01T00:00:00-05:00 March 2026 twice: a path in -05:00, held first, and an origin in Z. The array is ordered by the instant of the start, which is the reverse of the order in the file.
year-and-months.example example A year beside its months (Extended)
target example.com
source file
array (13)
?start=2025-01-01T00:00:00Z&end=2026-01-01T00:00:00Z: array (13)
2025-12 Calendar 2025 and its twelve months, held together. granularity=yearly selects the year, granularity=monthly the months; a server sums nothing, and adding all thirteen would count the year twice.
target-types.example example Nine target types
target types.example
source file
array (9) 2025 One object for each of the nine kinds of target the draft lists, with the four measurement methods spread over them.
upstream-roles.example example Upstream roles
target Roles Org Ltd
source file
object 2025 An organization with seven upstream entries: one for each of the six roles and one with no role. The URIs do not resolve.
chain-org.example example Upstream chain, 1 of 5: organization
target Chain Org Ltd
source file
object 2025 The start of a chain of five declarations. The upstream is a relative reference, resolved against the URI this declaration was retrieved from; a walk of depth three stops before the fifth.
chain-tenant.example example Upstream chain, 2 of 5: tenant
target chain-org
source file
object 2025 What the cloud provider states it delivered to the organization: 320 MWh, tenant-scoped.
chain-host.example example Upstream chain, 3 of 5: hosting facility
target Chain Hosting DC
source file
object 2025 The facility that hosts the provider's servers; it names a colocation as its upstream.
chain-colo.example example Upstream chain, 4 of 5: colocation
target Chain Colo Hall 2
source file
object 2025 The colocation hall, which names the electricity supplier.
chain-grid.example example Upstream chain, 5 of 5: electricity supplier
target Chain Grid Utility
source file
object 2025 The fifth declaration: reachable by its URL, and not by a walk from the organization, which stops at depth three.
chain-inconsistent.example example Upstream figures that disagree
target Chain Small Org
source file
object 2025 An organization that states 100 MWh while the tenant declaration says 320 MWh were delivered to it. Two self-asserted claims that do not agree: something to look into, not a failure to conform.
loop-a.example example Upstream loop, A
target Loop Network A
source file
object 2025 Names loop-b as its upstream. Each answers normally; only a walk stops.
loop-b.example example Upstream loop, B
target Loop Network B
source file
object 2025 Names loop-a as its upstream: a walk refuses the second retrieval of loop-a.
signed-array.example example Three signed months (Extended)
target signed.example
source file
object (the file holds 3; the newest is served)
?start=2026-01-01T00:00:00Z&end=2026-04-01T00:00:00Z&granularity=monthly: array (3)
2026-03 Three monthly objects, each with its own embedded signature, so a selection of them is still signed: the gateway serves the signed bytes and never signs a selection itself. Each verifies against the key in its own header (the public test key of RFC 8032).
signed-es256.example example Signed with ES256
target signed-es256.example
source file
object 2025 One object signed with ES256 (ECDSA P-256), the other algorithm a consumer verifies.

This gateway's own report

At /.well-known/sustainability-data (target sustainability-data-gateway). A model, not a measurement (third-party-modeled): average power × hours live × a cited grid intensity. Power is the average the operator entered for each month from the host's usage metrics, listed in the report's provider field; a month without an entry is not reported. Every constant is in the methodology.

curl -s "https://sustainability.up.railway.app/.well-known/sustainability-data?start=2026-07-01T00:00:00Z&end=2026-08-01T00:00:00Z"
curl -s "https://sustainability.up.railway.app/.well-known/sustainability-data?granularity=monthly"
curl -s "https://sustainability.up.railway.app/.well-known/sustainability-data?granularity=daily"

Integrity and attestation

Consumer cross-validation

At start-up, every document served here is produced by the published publisher library and validated by the published consumer library — the same code a third party would run. A validation failure stops the gateway from starting. Here: sustainability-wellknown-consumer@0.8.2, 131 documents (every subject, this report and its Extended variants, and the trend arrays of the Extended examples).

HTTP behaviour

Every link below is a working GET (a few go off-site, to the documents a report links to); the right column is the expected answer. Headers, 304 and 405 need a client that shows them (next section).

Live requests you can run against this deployment
RequestDemonstratesExpected
/.well-known/sustainability-data the gateway's own report, parameterless 200, one object: the latest whole month whose power was entered
/.well-known/sustainability-data?start=2026-07-01T00:00:00Z&end=2026-08-01T00:00:00Z Extended: a range, the month of go-live 200, an array: the objects held that overlap the range, ascending
/.well-known/sustainability-data?granularity=monthly Extended: granularity alone 200, an array: every whole month held
/.well-known/sustainability-data?granularity=daily Extended: the days 200, an array: the most recent whole days held
/.well-known/sustainability-data?start=2025-01-01T00:00:00Z&end=2026-01-01T00:00:00Z&granularity=monthly Extended: a range before go-live 200, [] — nothing is held before go-live
/.well-known/sustainability-data?granularity=weekly Extended: an unknown granularity value 200, the parameter is ignored: the parameterless answer
/.well-known/sustainability-data?start=2026-08-01 Extended: a date without a time 200, ignored, never read as another value: the parameterless answer
/.well-known/sustainability-data?granularity=monthly&granularity=daily Extended: a parameter given twice 200, ignored: the parameterless answer
/.well-known/sustainability-data?target=/other Extended: a target the gateway does not report 200, []
/.well-known/sustainability-data the same report, read for its `signed` member (Ed25519, embedded in the object) 200; the declaration carries `signed`, a JWS over itself — there is no separate signature resource
https://andreibesleaga.com/keys/sustainability-gateway-signing-key.jwk the signing public key, hosted out of band 200, application/jwk+json
https://andreibesleaga.com/attestations/sustainability-data-gateway-2026.vc.jwt the attestation credential the self report links to 200, application/vc+jwt
/automattic.com/.well-known/sustainability-data a curated subject declaration (automattic.com) 200, application/sustainability-data+json
/automattic.com/.well-known/sustainability-data?start=2026-01-01T00:00:00Z&granularity=monthly a Basic subject with query parameters 200, the parameters are ignored
https://sustainability.up.railway.app/cloud-demo.example/.well-known/sustainability-data the upstream chain: the declaration tenant-demo.example names as its cloud provider 200, the tenant-scoped declaration this gateway serves for that upstream — what `--upstream` walks
/carbontxt-demo.example/.well-known/sustainability-data an adapter demonstration (carbontxt-demo.example) 200, mapped from its upstream
/extended.example/.well-known/sustainability-data?start=2026-03-20T00:00:00Z&end=2026-03-21T00:00:00Z&granularity=daily a wire-format example declaring Extended (extended.example): its range 200, a sorted array (1 objects)
/extended.example/.well-known/sustainability-data?granularity=daily the same example, granularity alone 200, a sorted array (1 objects)
/nobody.example/.well-known/sustainability-data an unknown subject 404
/index.json the machine-readable index 200, application/json
/healthz the health check 200

Check a file

Type an origin that serves /.well-known/sustainability-data. The gateway fetches it once with the published consumer library (at most once an hour per host, https only, public names only, 64 KiB, 5 s) and says whether the bytes it got are a schema-valid declaration. That is all it says: nothing about accuracy, no endorsement; no result is stored (the hosting provider's request log keeps the request line for its retention period, as the legal notice says).

Badge for a README, computed from the same hourly check: ![sustainability-data](https://sustainability.up.railway.app/badge/example.com.svg)

Deployments

Origins known to serve the format are listed, with their operator, in IMPLEMENTATIONS.md; a scheduled workflow fetches each one daily and checks the media type and the schema (results). Origins run by the operator of this gateway are marked as such; nobody is listed without consent. Copy-paste recipes for the most used servers, hosts and frameworks are in deploy/.

Verify it yourself

With the reference consumer (sustainability-wellknown-consumer 0.8.0+). --strict runs the conformance battery: a failed MUST fails it, an unmet SHOULD is reported. Signatures come back verified, unsigned or unverified — never the data as "true" (docs).

# this gateway's own report, full battery, plus its attestation
npx -y -p sustainability-wellknown-consumer sustainability-fetch https://sustainability.up.railway.app --strict --verify-attestation
# any subject, by its path prefix
npx -y -p sustainability-wellknown-consumer sustainability-fetch https://sustainability.up.railway.app/wikimedia.org --strict
# a trend array
npx -y -p sustainability-wellknown-consumer sustainability-fetch "https://sustainability.up.railway.app/yearly.example/.well-known/sustainability-data?start=2025-01-01T00:00:00Z&end=2026-01-01T00:00:00Z&granularity=monthly"
# the signature, and an upstream chain
npx -y -p sustainability-wellknown-consumer sustainability-fetch https://sustainability.up.railway.app --verify
npx -y -p sustainability-wellknown-consumer sustainability-fetch https://sustainability.up.railway.app/tenant-demo.example --upstream
# just read one
curl -s https://sustainability.up.railway.app/wikimedia.org/.well-known/sustainability-data | python3 -m json.tool

Without this project's tools: the JSON validates against the JTD and CDDL schemas. Machine-readable list: /index.json. More: README, guide, methodology, sources, signing.

References