For developers
The catalog is also published as JSON, so other catalogs and tools can list these projects alongside their own. The files are static, so there is no key to request and no rate limit.
index.json describes the rest: counts, licenses, vocabularies and the
notes below. Every endpoint returns the same envelope, with the records under projects.
| Endpoint | Contents | Records |
|---|---|---|
| v1/catalog.json | Every published project | 89 |
| v1/datasets.json | Projects that publish a dataset | 72 |
| v1/usecases.json | Projects that publish a use case | 38 |
Two different things are licensed here, and it matters which one you mean.
The catalog metadata is CC0 1.0. You can republish these records freely, with or
without attribution. Every response says so under license.
The linked assets are not ours. Each record's license field describes the dataset or
model we point at. It is null for 45 of 89 projects. That means no
license has been recorded, not that the asset is unlicensed and not that it is free to reuse.
Store id, for example ui_6. It comes from the Project ID
column in the sheet and survives title edits. canonical_url contains a title-derived slug
that changes when the title does, and aliases lists identifiers a project used to be
reachable by.
Records carry the same vocabularies the website filters on: sdgs
(13), data_types (8), countries with ISO codes (25),
and maturity.tags. Maturity stages are cumulative, so a project that reached a use case
also carries pilot:
# 49 of 89 projects have reached pilot or beyond
import urllib.request, json
url = "https://fair-forward.github.io/datasets/api/v1/catalog.json"
data = json.load(urllib.request.urlopen(url))
pilot_plus = [p for p in data["projects"]
if {"pilot", "usecase", "business"} & set(p["maturity"]["tags"])]
| Field | Type | Recorded | Notes |
|---|---|---|---|
| id | string | 89 | Stable. Store this one. |
| title | string | 89 | Plain text. |
| description | string | 88 | Prose, no markup. |
| organizations | roles | 89 | provided_by, catalyzed_by, financed_by. Each has text and links. |
| countries[] | name, iso2 | 89 | ISO 3166-1 alpha-2. Join on iso2, not name. |
| regions[] | string[] | 5 | Values with no country code, such as "West Africa". |
| sdgs[] | string[] | 88 | The closest thing we record to a sector. |
| data_types[] | string[] | 88 | Such as Voice or Geospatial/Remote Sensing. |
| maturity.tags[] | string[] | 89 | Cumulative stages, as above. |
| links | label, url | 83 | Grouped as dataset, usecase, additional, documents. |
| canonical_url | string | 89 | The project's page here. A good place to link back to. |
| license | name, spdx, url | 44 | Often null. See above. |
| content | text, provenance | 76 | Check provenance before showing it. |
| contact | string | 89 | Free text, usually an email address. |
| image | string | 87 | Absolute URL. Some are stock placeholders. |
There are no per-record dates, because the sheet does not record any. Instead every
response carries a version content hash: fetch again and compare it to see whether anything
changed. HTTP Last-Modified and ETag date the file. The catalog is rebuilt when
someone triggers it, not on a schedule, so checking daily is ample.
45 of 89 projects have no license recorded. That means nobody has established the terms, not that the asset is free to reuse. Please show it as unknown rather than filling in a default.
Fields under content carry provenance: "curated" or
"auto-enriched". Auto-enriched text was drafted from the linked resources and is not a
verified claim by the project team.
A project is listed only while it has a working link or an access note. A missing id is not a retraction, so please do not treat it as a delete.
Published so people can reach a project team about their work. Please do not use it for bulk collection or unrelated outreach, and let us know before republishing it.