Sign in

Infrastructure Concession Intelligence API

Programmatic access to 33,000+ global infrastructure concessions. Airports, toll roads, ports, water, rail, waste, power distribution, gas distribution, marinas.

33,000+concessions
170+countries
9asset classes
10,800+ownership events
Dailyupdates

Quick Start

Get from zero to first API call in 60 seconds. Concessio's infrastructure concession API returns structured data about government-granted BOT contracts, concession agreements, and PPP/PFI projects worldwide.

cURL

curl -H "Authorization: Bearer ck_live_xxx" \
  "https://app.concessio.io/api/v1/concessions?sector=Airport&country=France&per_page=5"

JavaScript

const resp = await fetch(
  "https://app.concessio.io/api/v1/concessions?sector=Airport&country=France",
  { headers: { "Authorization": "Bearer ck_live_xxx" } }
);
const { data, pagination } = await resp.json();
console.log(`Found ${pagination.total} airport concessions in France`);

Python

import requests
resp = requests.get(
    "https://app.concessio.io/api/v1/concessions",
    params={"sector": "Airport", "country": "France"},
    headers={"Authorization": "Bearer ck_live_xxx"}
)
data = resp.json()
print(f"Found {data['pagination']['total']} airport concessions in France")

Response

{
  "data": [
    {
      "id": "fund-vinci-lyon-saint-exup-ry-airport",
      "concessio_id": "FR10C0000401",
      "registry_url": "https://concessio.io/id/FR10C0000401",
      "name": "Lyon-Saint Exupéry Airport Concession",
      "country": "France",
      "sector": "Airport",
      "operator": "Vinci SA",
      "status": "Active",
      "concession_end": null,
      "contract_type": "Concession"
    }
  ],
  "pagination": { "page": 1, "per_page": 25, "total": 54, "total_pages": 3 }
}

Authentication & Rate Limits

Concessio uses API keys for authentication. Pass your key via the Authorization header. API keys are tied to your organization and plan tier.

Authorization: Bearer ck_live_xxxxxxxxxxxx

Key format: ck_live_ for production, ck_test_ for sandbox.

PlanRate LimitAccessPrice
Screen100 req/hrSearch + basic fields$750/mo
Advise500 req/hrFull detail + financials + ownership$2,500/mo
Manage2,000 req/hrFull detail + portfolio + bulkCustom

Error Responses

StatusCodeDescription
400invalid_paramsMalformed query parameters
401unauthorizedMissing or invalid API key
403plan_restrictedEndpoint not available on current plan
404not_foundConcession ID does not exist
429rate_limitedRate limit exceeded — includes retry_after
500internal_errorServer error

Concessio IDs

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:

concessio.io/id/FR10C0000401

Format

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:

CodeAsset classFamily
10AirportTransport
11Toll RoadTransport
12PortTransport
13RailTransport
14MarinaTransport
20WaterUtilities
21Power DistributionUtilities
22Gas DistributionUtilities
23District HeatingUtilities
30WasteEnvironmental
40SocialSocial
99Other InfrastructureOther

Structure codes identify the contract type:

CodeStructure
CConcession (pure operational)
BBOT — Build-Operate-Transfer
OBOOT — Build-Own-Operate-Transfer
TBTO — Build-Transfer-Operate
WBOO — Build-Own-Operate
DDBFOM — Design-Build-Finance-Operate-Maintain
FDBFO — Design-Build-Finance-Operate
RROT — Rehabilitate-Operate-Transfer
LLease (long-term)
AAffermage
MManagement Contract
PPPP — Public-Private Partnership (generic)
XOther / unknown

Lookup

Every Concessio ID resolves to a free public registry page and a JSON lookup endpoint. No API key required.

TypeURL pattern
HTML pagehttps://concessio.io/id/{ID}
JSON APIhttps://concessio.io/api/v1/id/{ID}

Live examples

Click any ID below to see its public registry page:

Concessio IDAssetCountrySector
FR10C0000401Lyon-Saint Exupéry AirportFranceAirport
CL11C0000011Accesos a ValdiviaChileToll Road
AU12C0000014Port Botany SydneyAustraliaPort
GB13X0000155Eurotunnel Freight Shuttle ServiceUnited KingdomRail
IN10R0000014Delhi Indira Gandhi Airport ExpansionIndiaAirport
ES11C0000103R-3 and R-5 Radial Autopistas MadridSpainToll Road
PT11P0000034Transmontana MotorwayPortugalToll Road
BR20R0000019Rio de Janeiro Water Bloc 4BrazilWater

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"
}

Validation

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

StatusCodeWhen
400invalid_formatNot 12 alphanumeric characters in the canonical layout
400invalid_check_digitFormat correct but Luhn fails — typo or fabricated
404not_foundFormat and Luhn valid but ID is not in the registry
200Concession found, full record returned

Concessio mints a Concessio ID for every infrastructure concession ingested into the database — currently 29,475+ concessions across 170+ countries and 12 asset classes. The registry adds new IDs as new concessions are ingested. IDs are never reused, never re-issued, and never reassigned.

API Reference

GET /api/v1/concessions — Search

Primary discovery endpoint for searching 33,000+ infrastructure concessions. Supports full-text search, country/sector/operator filtering, expiry date ranges, and pagination.

ParameterTypeDescription
qstringFull-text search across name, country, operator, sector
countrystringCountry name, comma-separated for multiple
sectorstringAirport, Toll Road, Port, Water, Rail, Waste, Power Distribution, Gas Distribution, Marina
expires_beforedateISO 8601 — concessions expiring before this date
expires_afterdateISO 8601 — concessions expiring after this date
operatorstringFuzzy match on operator/concessionaire name
statusstringActive, Expired, Under Tender, Cancelled
sortstringconcession_end, name, country (default: concession_end)
orderstringasc or desc (default: asc)
pagenumberPage number (default: 1)
per_pagenumberResults per page (default: 25, max: 100)

GET /api/v1/concessions/:id — Detail

Full detail for a single infrastructure concession including ownership history, financials, lifecycle events, and contract terms. Returns current owner with stake percentage and transaction history.

GET /api/v1/sectors

Valid sector values with concession counts. Helps AI agents understand available infrastructure categories in the Concessio database.

GET /api/v1/countries

All countries with infrastructure concession counts and region mapping. Helps agents validate country names and discover Concessio's geographic coverage across 170+ countries.

GET /api/v1/operators

Search infrastructure operators and concessionaires. Supports fuzzy matching. Returns operator name and concession count. Covers 700+ operators including Vinci, Ferrovial, Transurban, Macquarie, Brookfield, Meridiam, DIF, and more.

GET /api/v1/stats

Aggregate statistics about the Concessio infrastructure concession database: total concessions (33,000+), breakdown by sector and region, concessions expiring within 12/24/36 months. Best first call for an AI agent to understand data scope.

Connect to Claude (MCP)

The Model Context Protocol (MCP) lets your AI assistant access Concessio's infrastructure concession data directly. When you connect Concessio to Claude, it can answer questions about infrastructure concessions, BOT contracts, government-granted operating rights, and concession expiry timelines using live data from our database of 33,000+ concessions.

Setup for Claude Desktop

Add to your claude_desktop_config.json:

macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

Windows: %APPDATA%\Claude\claude_desktop_config.json

{
  "mcpServers": {
    "concessio": {
      "transport": {
        "type": "sse",
        "url": "https://app.concessio.io/api/mcp/sse"
      },
      "headers": {
        "Authorization": "Bearer ck_live_xxxx"
      }
    }
  }
}

Available Tools

ToolWhen to Use
search_concessionsSearch for infrastructure concessions by country, sector, operator, or expiry date. Use for any question about specific concessions, BOT contracts, or government-granted operating rights.
get_concession_detailGet full details for a specific concession — ownership history, financials, contract terms. Use after search to drill into a specific asset.
get_operator_portfolioList all concessions held by a company. Use when asked about an operator's holdings, portfolio, or infrastructure exposure.
get_expiring_concessionsFind concessions expiring soon. Critical for deal origination — expiring concessions signal re-tender opportunities.
get_concession_statsDatabase overview: totals by sector, region, status, and expiry counts. Best first call to understand scope.
get_country_concessionsAll concessions in a specific country, broken down by sector. Use for country-level infrastructure landscape questions.

Example Queries

Once connected, ask Claude questions like these — Concessio provides the data:

  • "What European airport concessions expire before 2030?"
  • "Show me Vinci's infrastructure concession portfolio"
  • "How many toll road concessions are there globally?"
  • "What concessions does Spain have?"
  • "Which water concessions are expiring in the next 18 months?"
  • "What is the total value of port concessions in Southeast Asia?"
  • "Compare rail concessions across France, Germany, and Italy"
  • "Find infrastructure assets operated by Macquarie"

Data Coverage

Concessio maintains the most comprehensive database of global infrastructure concessions, covering government-granted BOT contracts, concession agreements, PPP/PFI projects, and regulated infrastructure assets.

MetricCoverage
Total concessions33,000+ and growing daily
Countries170+ countries, with depth in Europe, Latin America, South/Southeast Asia, Africa
Asset classesAirports, toll roads, ports, water utilities, rail, waste management, power distribution, gas distribution, marinas
Ownership events10,800+ tracked ownership changes from competition filings, fund reports, press
Transaction multiples1,618 transactions with EV/EBITDA and valuation data
Contract clauses5,297 extracted and benchmarked clauses
Operators tracked700+ infrastructure operators and concessionaires
Data sourcesWorld Bank PPI, EU TED procurement, UK PFI, India PPPAC, IFC, EIB, EBRD, national PPP registries, listed fund reports, competition authority filings, daily press monitoring
Update frequencyDaily ingestion from public procurement databases, weekly fund report checks, daily news monitoring

Data Fields

Each infrastructure concession record includes: name, country, region, sector, operator, grantor, concession start/end dates, duration, contract value, status, contract type, source, and for Advise-tier users: ownership history, financial metrics, and concession intelligence metadata.

Ownership Intelligence

Concessio tracks who currently owns every infrastructure concession through an event-sourced ownership layer. Sources include EU DG Competition merger decisions, UK CMA rulings, national competition authority filings, audited fund reports (HICL, BBGI, INPP, Transurban, Vinci, Ferrovial, and 30+ more), and daily infrastructure deal news monitoring. Each ownership event records acquirer, seller, stake percentage, transaction value, and source with confidence scoring.