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
0means the entry is not tied to a vintage year. - Every ledger entry has a unique, immutable
transfer_id. A certificate'stransaction_idpoints to it, so a certificate can be traced to its ledger entry. - To stay in sync, poll
/projects.jsonand fetch only the projects whoselast_updated_at_millischanged. 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* | path | Numeric 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* | path | Numeric 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.
| page | query | Zero-based page number. |
| q | query | Text search on project name, project number and remover name. |
| f_pathway | query | Pathway ids separated by | (1 construction, 2 land, 3 ocean, 4 rock). Example: 2|3 |
| f_loc | query | Only projects whose location contains this text. |
| f_vintage | query | Only projects whose vintage range includes this year. |
| label_icvcm | query | Only projects carrying the ICVCM label. |
| label_crcf | query | Only projects carrying the CRCF label. |
| sort | query | One of: created, random. |
| reverse | query | Reverse 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.
| Code | Meaning |
|---|---|
| 100 | Concept |
| 101 | Holding |
| 102 | PendingCommonHolding |
| 103 | Issue |
| 104 | CommonHoldingIn |
| 110 | Broker |
| 111 | BrokerPurchase |
| 112 | Purchase |
| 113 | PurchaseRetire |
| 114 | Reserve |
| 120 | Void |
| 121 | Revert |
| 130 | Deliver |
| 132 | CommonHoldingOut |
Pathways
| pathway_id | Pathway |
|---|---|
| 1 | Construction Stored Carbon |
| 2 | Land Stored Carbon |
| 3 | Ocean Stored Carbon |
| 4 | Rock 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.