UTC --:--:--
Docs·API reference·GET /v1/public/sustainability-index

The Sustainability Index, as JSON

No auth, CC BY 4.0, edge-cached. This endpoint serves the latest published, frozen, signed ANNUAL report — never a live or on-demand aggregate. Signals come from real operator-reported outcome sessions under per-tenant research consent, not a score-request proxy. When nothing has cleared the coverage floor yet, the response is the same document shape with publication: null — the honest empty-state, not a fabricated number.

GEThttps://api.goable.io/v1/public/sustainability-index

When to use

The Goable Sustainability Index is an annual, frozen and signed report composited from real, consented outcome sessions. It is not a carbon footprint, an emissions inventory or a certification. Per released zone it exposes up to six operational signals — access/ travel low-impact share (a participant-declared estimate), non- combustion propulsion share, facility renewable-energy share, equipment electrification, seasonal evenness, and equipment- provenance circularity (a weak proxy) — composited only where the zone has data for a signal, renormalised over whatever is present. Average group size is captured and disclosed but never scored. Protected-area proximity is a candidate future signal: it is not yet captured, disclosed or scored anywhere in this response.

Response field names such as carbonNeutralShare are stable API contract keys carried over from an earlier phase; read them as documented (non-combustion propulsion share), not as a net CO2 claim. Reach for this endpoint when you need the machine-readable artefact for a dashboard embed, academic citation or an operational-data appendix that may support sustainability reporting — it does not establish CSRD, GRI or GSTC compliance. The JSON is JSON-LD (Schema.org-typed).

Request

A single optional query parameter. Any from, to, k or zoneKm params from the earlier on-demand version of this endpoint are no longer accepted — this endpoint only ever serves a published year, never a caller-defined window.

year
optional
Serve that year's published report (its latest revision, after any correction). Omit to get the most recently published year overall.

Example requests:

curl "https://api.goable.io/v1/public/sustainability-index"
curl "https://api.goable.io/v1/public/sustainability-index?year=2026"

No Authorization header, no X-Goable-Key: the sustainability index is deliberately open. The endpoint is edge-cached (cache-control: public, max-age=300) — reasonable for a frozen annual document, not a tight cache.

Response

Content-Type: application/ld+json. Shape below for a published year; the field values are illustrative, not observed platform data.

{
 "@context": "https://schema.org",
 "@type": "GoableSustainabilityIndex",
 "generatedAt": "2026-07-04T09:12:04.812Z",
 "period": {
 "from": "2026-01-01T00:00:00Z",
 "to": "2026-12-31T23:59:59Z"
 },
 "methodology": {
 "weights": {
    "accessLowImpact": 0.30,
    "carbonNeutralShare": 0.20,
    "facilityRenewable": 0.18,
    "electrificationShare": 0.12,
    "seasonalEvenness": 0.12,
    "provenanceCircularity": 0.08
 }
 },
 "overall": {
 "index": 61.4,
 "totalSessions": 14210,
 "carbonNeutralShare": 0.764,
 "dataCompleteness": 0.71,
 "avgGroupSize": 3.4,
 "zonesReleased": 18,
 "zonesSuppressed": 7
 },
 "zones": [
 {
 "zoneKey": "36.00,-5.50",
 "totalSessions": 1240,
 "accessLowImpactShare": 0.62,
 "carbonNeutralShare": 0.921,
 "facilityRenewableShare": null,
 "electrificationShare": 0.14,
 "seasonalEvenness": null,
 "provenanceCircularityShare": 0.55,
 "avgGroupSize": 3.4,
 "availableWeight": 0.7,
 "comparability": "partial",
 "zoneIndex": 61.6
 }
 ],
 "license": "CC BY 4.0",
 "attribution": "Goable Sustainability Index (goable.io/research)",
 "publication": {
 "year": 2026,
 "revision": 1,
 "publishedAt": "2027-03-31T00:00:00Z",
 "signedBy": "Sustainability Index lead",
 "methodologyVersion": "2026.2-outcomes-v2"
 }
}

Publication vs the honest empty-state

Every response carries a top-level publication field. When a year has cleared the coverage floor and been signed, it is an object: { year, revision, publishedAt, signedBy, methodologyVersion }. When nothing has been published for the requested year — or at all — publication is null and the rest of the document reports zero zones/sessions. A consumer never needs a special branch: publication === null means "nothing official for this period," full stop. There is no laxer path by which a below-floor or unpublished figure reaches this endpoint; preview and publish share the exact same generation and floor-evaluation code, so a number either clears the floor and gets signed, or the endpoint returns the empty-state.

Governance

These are enforced in the generation and publication code as release criteria, not left to discretion:

  • k-anonymity floor ≥ 10 distinct contributing tenants per zone. A zone missing the contributor count, or below the threshold, is suppressed and only counted in overall.zonesSuppressed — fail-closed.
  • Platform coverage floor ≥ 30 distinct contributors AND ≥ 1,000 real sessions. Evaluated over the same publication-clamped window as the report. Below either, nothing is written for that year — the endpoint serves the empty-state. Early years publishing nothing is intended behaviour, not a bug.
  • Spatial truncation. Sessions are snapped to a regional grid before any aggregation; exact coordinates never leave the server.
  • 90-day publication lag. The reporting window is clamped to no closer than 90 days before "now," so a just-completed period can't be published before its data settles.
  • Frozen, signed, revisable. A published year is immutable. Corrections create a new numbered revision that supersedes the prior one; the old revision is retained, never deleted.
  • ≥50% per-signal declaration coverage. Each of the six composited signals is included for a zone only when at least half its sessions carry it; below that the signal is dropped and the remaining weights renormalise.

These are minimum disclosure controls, not a guarantee of anonymity: pseudonymous and aggregated data can still be personal data under GDPR Recital 26.

License + citation

Published under Creative Commons Attribution 4.0 International (CC BY 4.0) once a year clears the coverage floor. Free to cite, embed, remix; the only ask is the attribution string carried on the document itself (attribution field). It may be cited as a supplementary, methodologically documented operational indicator, not as proof of CSRD, GRI or GSTC compliance. Recommended citation:

Goable Sustainability Index. {publication.year} report, revision {publication.revision}.
Published {publication.publishedAt}, methodology {publication.methodologyVersion}.
CC BY 4.0. https://goable.io/sustainability-index

Errors

422 VALIDATION_ERROR: malformed year (not an integer, or outside 2000–2100). 503 SERVICE_UNAVAILABLE: the publication store is not wired on this deployment (transient, the endpoint returns automatically once it is available).