Oncra Registry API

Every project, ledger entry and certificate in the Oncra Registry is public. This API returns the same data as the registry pages, as JSON, so other registries, marketplaces, auditors and researchers can read and check it without asking us.

The API is described in the OpenAPI 3.1 standard. Machine-readable specification: https://registry.oncra.org/openapi.json (version 1.0.0). Load it into any OpenAPI tool to generate a client.

Quick start

No key is needed for public data.

# Which projects exist, and when did each last change?
curl https://registry.oncra.org/projects.json

# Project number to id
curl https://registry.oncra.org/api/projects/by-nr/BBL-L-001

# Details and full ledger of project 2
curl https://registry.oncra.org/projects/2/details.json
curl https://registry.oncra.org/projects/2/ledger.json

# Verify a certificate
curl https://registry.oncra.org/api/certificate/ARB-O-001-1-1/

Conventions

  • Quantities of CO2e are in kilograms. Divide by 1000 for tonnes.
  • Dates are Unix time in milliseconds, UTC.
  • Prices are in euro cents.
  • Vintage 0 means the entry is not tied to a vintage year.
  • Every ledger entry has a unique, immutable transfer_id. A certificate's transaction_id points to it, so a certificate can be traced to its ledger entry.
  • To stay in sync, poll /projects.json and fetch only the projects whose last_updated_at_millis changed. Please keep to about one request per second.

Endpoints

GET/projects.json

List all public projects with their last update time

Lightweight change feed. Compare last_updated_at_millis with your copy and fetch only the projects that changed.

Responses: 200 All public project ids with a change timestamp.

GET/projects/{id}/details.json

Project details

Project metadata (remover, pathway, methods, location, area, certification status, labels) and the public project and remover descriptions as HTML.

id*pathNumeric project id. Resolve a public project number (e.g. BBL-L-001) with /api/projects/by-nr/{nr}. Example: 2

Responses: 200 Project details. · 404 Unknown or non-public project.

GET/projects/{id}/ledger.json

Project ledger

The full transaction history of a project. Each row is a transaction; sub_rows are its booking lines and sum up to the row. Certificate numbers appear on the row only. tfoot holds the project totals.

id*pathNumeric project id. Resolve a public project number (e.g. BBL-L-001) with /api/projects/by-nr/{nr}. Example: 2

Responses: 200 Ledger table. · 404 Unknown or non-public project.

GET/api/projects

Search and filter projects (paged)

The project list as shown on the registry home page, 12 per page, with registry-wide totals in stat.

pagequeryZero-based page number.
qqueryText search on project name, project number and remover name.
f_pathwayqueryPathway ids separated by | (1 construction, 2 land, 3 ocean, 4 rock). Example: 2|3
f_locqueryOnly projects whose location contains this text.
f_vintagequeryOnly projects whose vintage range includes this year.
label_icvcmqueryOnly projects carrying the ICVCM label.
label_crcfqueryOnly projects carrying the CRCF label.
sortquery One of: created, random.
reversequeryReverse the sort order.

Responses: 200 One page of projects.

GET/api/projects/map

All public projects with coordinates

Responses: 200 Projects with latitude and longitude.

GET/api/projects/by-nr/{nr}

Resolve a project number to its id

nr*path Example: BBL-L-001

Responses: 200 The project id. · 404 No project with this number.

GET/api/certificate/{nr}/

Verify a certificate

Returns who the certificate was presented to, for which project, how much CO2e and its current status, plus a link to the PDF. The certificate number is printed on every certificate and appears in the project ledger.

nr*path Example: ARB-O-001-1-1

Responses: 200 Certificate data. · 404 Unknown or non-public certificate.

GET/account/wallet.jsonAPI token

Your holdings

Units held by the account that owns the token. Vintage 0 means no specific vintage.

Responses: 200 Wallet tables. · 401 Missing or invalid token.

GET/api/users/meAPI token

The account behind the token

Responses: 200 Account profile. · 401 Missing or invalid token.

Ledger entry codes

Each row in a project ledger has a code saying what happened.

CodeMeaning
100Concept
101Holding
102PendingCommonHolding
103Issue
104CommonHoldingIn
110Broker
111BrokerPurchase
112Purchase
113PurchaseRetire
114Reserve
120Void
121Revert
130Deliver
132CommonHoldingOut

Pathways

pathway_idPathway
1Construction Stored Carbon
2Land Stored Carbon
3Ocean Stored Carbon
4Rock Stored Carbon

A project's certification_status is one of pre_validated, validated or verified. The labels label_icvcm and label_crcf show which external labels a project carries.

Your own account

Account holders can read their own holdings with a personal API token. Create one when signed in under Account → API tokens and send it as a header:

curl -H "Authorization: Bearer <token>" https://registry.oncra.org/account/wallet.json

Treat a token like a password. Delete it on the same page when you no longer need it.

Data exchange with other registries

Under the Oncra Guidelines (Section 5.1) the registry exchanges information with other registries in line with Article 8(1) of Implementing Regulation (EU) 2025/2358. This public API is the open read interface for that exchange. Registries that need a dedicated exchange can contact us.

Contact

Questions, or a field you need that is missing: info@oncra.org.