---
title: "Get a country's adoption aggregates"
method: GET
path: "/v1/adoption/{country}"
tags: ["Adoption"]
---

# Get a country's adoption aggregates

`GET /v1/adoption/{country}`

## Request

- Base URL: `https://api.peppolstatus.com`
- URL: `https://api.peppolstatus.com/v1/adoption/{country}`
- Auth: one of:
  - HTTP bearer
  - API key in header `X-API-Key`

Peppol adoption for one country as one bare object: headline totals (universe, on_peppol, penetration), the single-dimension cuts (sector with a NACE Rev. 2.1 section rollup (A–V), region, FR-only département, size class (FR and NO), BE-only province + postcode + mandate scope, legal-form family, and company age), the same categorical cuts cross-tabbed by company-age band (`cuts_by_age`), and the trend (monthly new adopters plus per-run penetration history). Region cells carry ISO 3166-2 (BE, NO, SK) / INSEE région (FR) codes and sector cells the NACE Rev. 2.1 division code, so the choropleth joins geometry with no string matching. Numerator cells below 10 matched companies are suppressed (`on_peppol`/`penetration` null, `suppressed` true); denominators are never suppressed. Cached for a day (data moves monthly).

## Path parameters

- `country` 'be' | 'fr' | 'sk' | 'no' | 'se' | 'fi' | 'si', required

## Response `200`

The country's adoption aggregates.

- AdoptionReport: A country's adoption aggregates as one bare object (spec §8.2). No attribution/licence/registry-metadata fields — only the bare snapshot_date.
  - `country` string, required: BE | FR.
  - `snapshot_date` string, nullable, required: YYYY-MM-DD of the latest run.
  - `generated_at` string, date-time, required
  - `totals` AdoptionTotals, required
    - `universe` integer, required
    - `on_peppol` integer, required
    - `penetration` number, nullable, required
  - `cuts` object, required
    - `sector` AdoptionCell[], required
      - `code` string, required: Stable join code: NACE Rev. 2.1 division (sector) or section letter A–V (section), ISO 3166-2 / INSEE région (region), INSEE département (department), ISO 3166-2 province (province), 4-digit postcode (postcode), trancheEffectifs (size), legal-form family (entity_type), or in_scope/out_scope (mandate), or age band (age).
      - `label` string, required
      - `universe` integer, required: Active registry entities in the cell.
      - `on_peppol` integer, nullable, required: Distinct on-Peppol matched companies, or null when suppressed.
      - `penetration` number, nullable, required: on_peppol / universe in [0,1], or null when suppressed.
      - `suppressed` boolean, required
      - `section` string, nullable: Parent NACE Rev. 2.1 section letter, A–V (sector division cells only). Rev. 2 letters K–U are L–V in Rev. 2.1 (new section K = telecom, IT, hosting).
    - `section` AdoptionCell[], required
      - `code` string, required: Stable join code: NACE Rev. 2.1 division (sector) or section letter A–V (section), ISO 3166-2 / INSEE région (region), INSEE département (department), ISO 3166-2 province (province), 4-digit postcode (postcode), trancheEffectifs (size), legal-form family (entity_type), or in_scope/out_scope (mandate), or age band (age).
      - `label` string, required
      - `universe` integer, required: Active registry entities in the cell.
      - `on_peppol` integer, nullable, required: Distinct on-Peppol matched companies, or null when suppressed.
      - `penetration` number, nullable, required: on_peppol / universe in [0,1], or null when suppressed.
      - `suppressed` boolean, required
      - `section` string, nullable: Parent NACE Rev. 2.1 section letter, A–V (sector division cells only). Rev. 2 letters K–U are L–V in Rev. 2.1 (new section K = telecom, IT, hosting).
    - `region` AdoptionCell[], required
      - `code` string, required: Stable join code: NACE Rev. 2.1 division (sector) or section letter A–V (section), ISO 3166-2 / INSEE région (region), INSEE département (department), ISO 3166-2 province (province), 4-digit postcode (postcode), trancheEffectifs (size), legal-form family (entity_type), or in_scope/out_scope (mandate), or age band (age).
      - `label` string, required
      - `universe` integer, required: Active registry entities in the cell.
      - `on_peppol` integer, nullable, required: Distinct on-Peppol matched companies, or null when suppressed.
      - `penetration` number, nullable, required: on_peppol / universe in [0,1], or null when suppressed.
      - `suppressed` boolean, required
      - `section` string, nullable: Parent NACE Rev. 2.1 section letter, A–V (sector division cells only). Rev. 2 letters K–U are L–V in Rev. 2.1 (new section K = telecom, IT, hosting).
    - `department` AdoptionCell[], required: FR-only finer geography (INSEE département, postcode-derived; Corsica merged as '20'); empty for BE.
      - `code` string, required: Stable join code: NACE Rev. 2.1 division (sector) or section letter A–V (section), ISO 3166-2 / INSEE région (region), INSEE département (department), ISO 3166-2 province (province), 4-digit postcode (postcode), trancheEffectifs (size), legal-form family (entity_type), or in_scope/out_scope (mandate), or age band (age).
      - `label` string, required
      - `universe` integer, required: Active registry entities in the cell.
      - `on_peppol` integer, nullable, required: Distinct on-Peppol matched companies, or null when suppressed.
      - `penetration` number, nullable, required: on_peppol / universe in [0,1], or null when suppressed.
      - `suppressed` boolean, required
      - `section` string, nullable: Parent NACE Rev. 2.1 section letter, A–V (sector division cells only). Rev. 2 letters K–U are L–V in Rev. 2.1 (new section K = telecom, IT, hosting).
    - `province` AdoptionCell[], required: BE-only finer geography (ISO 3166-2 province, postcode-derived; rolls up inside region); empty for FR.
      - `code` string, required: Stable join code: NACE Rev. 2.1 division (sector) or section letter A–V (section), ISO 3166-2 / INSEE région (region), INSEE département (department), ISO 3166-2 province (province), 4-digit postcode (postcode), trancheEffectifs (size), legal-form family (entity_type), or in_scope/out_scope (mandate), or age band (age).
      - `label` string, required
      - `universe` integer, required: Active registry entities in the cell.
      - `on_peppol` integer, nullable, required: Distinct on-Peppol matched companies, or null when suppressed.
      - `penetration` number, nullable, required: on_peppol / universe in [0,1], or null when suppressed.
      - `suppressed` boolean, required
      - `section` string, nullable: Parent NACE Rev. 2.1 section letter, A–V (sector division cells only). Rev. 2 letters K–U are L–V in Rev. 2.1 (new section K = telecom, IT, hosting).
    - `postcode` AdoptionCell[], required: BE-only finest geography — one cell per 4-digit postcode; empty for FR. Only covers register entities with a known postcode.
      - `code` string, required: Stable join code: NACE Rev. 2.1 division (sector) or section letter A–V (section), ISO 3166-2 / INSEE région (region), INSEE département (department), ISO 3166-2 province (province), 4-digit postcode (postcode), trancheEffectifs (size), legal-form family (entity_type), or in_scope/out_scope (mandate), or age band (age).
      - `label` string, required
      - `universe` integer, required: Active registry entities in the cell.
      - `on_peppol` integer, nullable, required: Distinct on-Peppol matched companies, or null when suppressed.
      - `penetration` number, nullable, required: on_peppol / universe in [0,1], or null when suppressed.
      - `suppressed` boolean, required
      - `section` string, nullable: Parent NACE Rev. 2.1 section letter, A–V (sector division cells only). Rev. 2 letters K–U are L–V in Rev. 2.1 (new section K = telecom, IT, hosting).
    - `size` AdoptionCell[], required: FR-only cut; empty for BE.
      - `code` string, required: Stable join code: NACE Rev. 2.1 division (sector) or section letter A–V (section), ISO 3166-2 / INSEE région (region), INSEE département (department), ISO 3166-2 province (province), 4-digit postcode (postcode), trancheEffectifs (size), legal-form family (entity_type), or in_scope/out_scope (mandate), or age band (age).
      - `label` string, required
      - `universe` integer, required: Active registry entities in the cell.
      - `on_peppol` integer, nullable, required: Distinct on-Peppol matched companies, or null when suppressed.
      - `penetration` number, nullable, required: on_peppol / universe in [0,1], or null when suppressed.
      - `suppressed` boolean, required
      - `section` string, nullable: Parent NACE Rev. 2.1 section letter, A–V (sector division cells only). Rev. 2 letters K–U are L–V in Rev. 2.1 (new section K = telecom, IT, hosting).
    - `entity_type` AdoptionCell[], required: Legal-form family — an exhaustive cut summing back to the total: companies (sociétés & legal entities), sole traders & self-employed, associations & non-profits, public sector & other.
      - `code` string, required: Stable join code: NACE Rev. 2.1 division (sector) or section letter A–V (section), ISO 3166-2 / INSEE région (region), INSEE département (department), ISO 3166-2 province (province), 4-digit postcode (postcode), trancheEffectifs (size), legal-form family (entity_type), or in_scope/out_scope (mandate), or age band (age).
      - `label` string, required
      - `universe` integer, required: Active registry entities in the cell.
      - `on_peppol` integer, nullable, required: Distinct on-Peppol matched companies, or null when suppressed.
      - `penetration` number, nullable, required: on_peppol / universe in [0,1], or null when suppressed.
      - `suppressed` boolean, required
      - `section` string, nullable: Parent NACE Rev. 2.1 section letter, A–V (sector division cells only). Rev. 2 letters K–U are L–V in Rev. 2.1 (new section K = telecom, IT, hosting).
    - `mandate` AdoptionCell[], required: E-invoicing-mandate scope by VAT liability (cells in_scope/out_scope). BE-only: derived from KBO VAT activities (ActivityGroup 001); empty where the register has no VAT signal (FR).
      - `code` string, required: Stable join code: NACE Rev. 2.1 division (sector) or section letter A–V (section), ISO 3166-2 / INSEE région (region), INSEE département (department), ISO 3166-2 province (province), 4-digit postcode (postcode), trancheEffectifs (size), legal-form family (entity_type), or in_scope/out_scope (mandate), or age band (age).
      - `label` string, required
      - `universe` integer, required: Active registry entities in the cell.
      - `on_peppol` integer, nullable, required: Distinct on-Peppol matched companies, or null when suppressed.
      - `penetration` number, nullable, required: on_peppol / universe in [0,1], or null when suppressed.
      - `suppressed` boolean, required
      - `section` string, nullable: Parent NACE Rev. 2.1 section letter, A–V (sector division cells only). Rev. 2 letters K–U are L–V in Rev. 2.1 (new section K = telecom, IT, hosting).
    - `age` AdoptionCell[], required: Company-age bands by completed years since incorporation (both countries): 00 <2y, 02 2–4y, 05 5–9y, 10 10–19y, 20 20+y. Covers entities with a known incorporation date.
      - `code` string, required: Stable join code: NACE Rev. 2.1 division (sector) or section letter A–V (section), ISO 3166-2 / INSEE région (region), INSEE département (department), ISO 3166-2 province (province), 4-digit postcode (postcode), trancheEffectifs (size), legal-form family (entity_type), or in_scope/out_scope (mandate), or age band (age).
      - `label` string, required
      - `universe` integer, required: Active registry entities in the cell.
      - `on_peppol` integer, nullable, required: Distinct on-Peppol matched companies, or null when suppressed.
      - `penetration` number, nullable, required: on_peppol / universe in [0,1], or null when suppressed.
      - `suppressed` boolean, required
      - `section` string, nullable: Parent NACE Rev. 2.1 section letter, A–V (sector division cells only). Rev. 2 letters K–U are L–V in Rev. 2.1 (new section K = telecom, IT, hosting).
    - `ap` AdoptionApCut[]: Per-Access-Point adoption — one cell per AP so consumers can zoom the numbers to a subset of APs. Optional: OMITTED entirely until the AP rollup has run. A company present at two APs counts in each AP's cell (per-AP attribution); sub-threshold (< 10) APs are dropped.
      - `code` string, required: Operator SeatID.
      - `label` string, required: Provider name, or the bare SeatID.
      - `on_peppol` integer, required: Distinct on-Peppol matched companies attributed to this AP.
      - `scope_on_peppol` integer, nullable, required: The mandate-scope subset (BE VAT-liable / FR company), or null when absent.
      - `penetration` number, nullable, required: on_peppol / country universe in [0,1], or null when universe is 0.
  - `cuts_by_age` object, required: The categorical cuts cross-tabbed by company-age band — an object keyed by the same band codes as cuts.age (00/02/05/10/20), each value holding the cuts re-sliced to that band (sector + section, region, size, entity_type, mandate). The geographic maps (department/province/postcode) are NOT crossed. Empty {} on a worker predating the cross-tab.
  - `trend` object, required
    - `new_adopters` AdoptionTrendPoint[], required
      - `month` string, required: YYYY-MM.
      - `count` integer, required: Companies whose first participant appeared.
    - `penetration` AdoptionPenetrationPoint[], required
      - `snapshot_date` string, nullable, required: YYYY-MM-DD of the run.
      - `universe` integer, required
      - `on_peppol` integer, required
      - `penetration` number, nullable, required

## Other responses

- `404`: Adoption data is published for 'be', 'fr', 'sk', 'no', 'se', 'fi' and 'si' only.

---

[API](https://skmtc.dev/peppolstatus/apis/peppolstatus-api.md) · [All operations](https://skmtc.dev/peppolstatus/apis/peppolstatus-api/llms.txt) · [OpenAPI document](https://skmtc.dev/peppolstatus/apis/peppolstatus-api/revisions/7e74fb32f23c?raw)
