Concessio IDs
A Concessio ID is the canonical 12-character identifier assigned to every infrastructure concession in the Concessio database — a stable, machine-readable, citation-grade reference.
Last updated July 29, 2026
A Concessio ID is the canonical 12-character identifier assigned to every infrastructure concession in the Concessio database. It functions for infrastructure concessions the way ISIN functions for securities or CUSIP functions for North American debt and equity instruments — a stable, machine-readable, citation-grade reference.
Concessio IDs are stable for the life of the concession. They do not change if the asset is renamed, sold, restructured, or transferred between operators. Cite them in filings, press releases, research reports, term sheets, and contracts. The registry is free and public — no authentication required for ID lookups.
Quick example. The Lyon-Saint Exupéry Airport concession:
What is the format of a Concessio ID?
The 12-character format is CC-AA-S-NNNNNN-K, displayed without hyphens in storage and with hyphens for human reading.
Stored: FR10C0000401 Display: FR-10-C-000040-1 CC France (ISO 3166-1 alpha-2) AA 10 Airport (asset class code) S C Concession (structure code) NNNNNN 000040 (sequence within prefix) K 1 (Luhn check digit)
Asset class codes group infrastructure into families. The first digit indicates the family (10s transport, 20s utilities, 30s environmental, 40s social); the second digit identifies the specific asset class:
| Code | Asset class | Family |
|---|---|---|
| 10 | Airport | Transport |
| 11 | Toll Road | Transport |
| 12 | Port | Transport |
| 13 | Rail | Transport |
| 14 | Marina | Transport |
| 20 | Water | Utilities |
| 21 | Power Distribution | Utilities |
| 22 | Gas Distribution | Utilities |
| 23 | District Heating | Utilities |
| 30 | Waste | Environmental |
| 40 | Social | Social |
| 99 | Other Infrastructure | Other |
Structure codes identify the contract type:
| Code | Structure |
|---|---|
| C | Concession (pure operational) |
| B | BOT — Build-Operate-Transfer |
| O | BOOT — Build-Own-Operate-Transfer |
| T | BTO — Build-Transfer-Operate |
| W | BOO — Build-Own-Operate |
| D | DBFOM — Design-Build-Finance-Operate-Maintain |
| F | DBFO — Design-Build-Finance-Operate |
| R | ROT — Rehabilitate-Operate-Transfer |
| L | Lease (long-term) |
| A | Affermage |
| M | Management Contract |
| P | PPP — Public-Private Partnership (generic) |
| X | Other / unknown |
How do I look up a Concessio ID?
Every Concessio ID resolves to a free public registry page and a JSON lookup endpoint. No API key required.
| Type | URL pattern |
|---|---|
| HTML page | https://concessio.io/id/{ID} |
| JSON API | https://concessio.io/api/v1/id/{ID} |
Live examples
Click any ID below to see its public registry page:
| Concessio ID | Asset | Country | Sector |
|---|---|---|---|
| FR10C0000401 | Lyon-Saint Exupéry Airport | France | Airport |
| CL11C0000011 | Accesos a Valdivia | Chile | Toll Road |
| AU12C0000014 | Port Botany Sydney | Australia | Port |
| GB13X0000155 | Eurotunnel Freight Shuttle Service | United Kingdom | Rail |
| IN10R0000014 | Delhi Indira Gandhi Airport Expansion | India | Airport |
| ES11C0000103 | R-3 and R-5 Radial Autopistas Madrid | Spain | Toll Road |
| PT11P0000034 | Transmontana Motorway | Portugal | Toll Road |
| BR20R0000019 | Rio de Janeiro Water Bloc 4 | Brazil | Water |
JSON response
GET https://concessio.io/api/v1/id/CL11C0000011
{
"id": "CL11C0000011",
"display_id": "CL-11-C-000001-1",
"name": "Accesos a Valdivia",
"country": "Chile",
"country_code": "CL",
"sector": "Toll Road",
"sector_family": "Transport",
"asset_class_code": "11",
"contract_type": "Concession",
"structure_code": "C",
"structure_name": "Concession (pure operational)",
"start_date": "2010-01-01",
"end_date": "2035-01-01",
"operator": null,
"grantor": "Ministerio de Obras Publicas (MOP)",
"registry_url": "https://concessio.io/id/CL11C0000011",
"retrieved_at": "2026-04-22T12:00:00.000Z"
}How is a Concessio ID validated?
The 12th character is a Luhn check digit using the ISIN variant (letters expanded to two-digit numbers, A=10 through Z=35). The check digit catches accidental typos and casually fabricated identifiers before they ever reach the database. A Concessio ID with a wrong check digit returns 400 invalid_check_digit from the API.
// Reference implementation — JavaScript
function validateConcessioId(id) {
const s = String(id).replace(/[^A-Z0-9]/gi, "").toUpperCase();
if (!/^[A-Z]{2}[0-9]{2}[A-Z0-9][0-9]{6}[0-9]$/.test(s)) return false;
let expanded = "";
for (const ch of s.slice(0, 11)) {
const c = ch.charCodeAt(0);
if (c >= 48 && c <= 57) expanded += ch;
else if (c >= 65 && c <= 90) expanded += String(c - 55);
}
let total = 0, alt = true;
for (let i = expanded.length - 1; i >= 0; i--) {
const d = parseInt(expanded[i], 10);
if (alt) { const dd = d * 2; total += dd >= 10 ? Math.floor(dd / 10) + (dd % 10) : dd; }
else total += d;
alt = !alt;
}
const expected = String((10 - (total % 10)) % 10);
return expected === s[11];
}
validateConcessioId("CL11C0000011"); // true
validateConcessioId("CL-11-C-000001-1"); // true (hyphens allowed)
validateConcessioId("CL11C0000099"); // false (bad check digit)Error responses
| Status | Code | When |
|---|---|---|
| 400 | invalid_format | Not 12 alphanumeric characters in the canonical layout |
| 400 | invalid_check_digit | Format correct but Luhn fails — typo or fabricated |
| 404 | not_found | Format and Luhn valid but ID is not in the registry |
| 200 | — | Concession found, full record returned |
Concessio mints a Concessio ID for every infrastructure concession ingested into the database — currently 22,000+ concessions across 185 countries and 15 asset classes. The registry adds new IDs as new concessions are ingested. IDs are never reused, never re-issued, and never reassigned.