---
title: "Get one network-level statistic as a daily series"
method: GET
path: "/v1/network/stats/history"
tags: ["Network"]
---

# Get one network-level statistic as a daily series

`GET /v1/network/stats/history`

## Request

- Base URL: `https://api.peppolstatus.com`
- URL: `https://api.peppolstatus.com/v1/network/stats/history`
- Auth: one of:
  - HTTP bearer
  - API key in header `X-API-Key`

One point for every UTC day of the window. `stat` is required. A flow statistic (`ap_switching` = Movers (AP), `cross_border` = Cross-border moves, `smp_switching` = Movers (SMP), `growth` = Net growth with Joiners and Leavers) carries per day its counts (`values`), the registered-participant count at the start of the day (`base`), the first key as a percentage of that base (`pct`) and its 7-day mean (`mean_7d`). For `cross_border`, `base` is all AP moves of the day and `pct` is the cross-border share of them. A day with no completed change scan has `gap: true` and `values: null` — a gap is never 0. The 7-day mean is the mean over the scanned days of `day − 6 .. day`: a gap day is in neither the sum nor the divisor, and the mean is null when all are gaps. It is the same figure as `trend_30d` of `/v1/network/stats`. For `growth`, a gap day keeps `joiners` and nulls `leavers` and `net`. A stock statistic (`concentration_ap` = Concentration (AP), `concentration_ap_country` = Concentration per country, `concentration_smp` = Concentration (SMP), `foreign_served` = Foreign-served participants, `penetration`) carries `values`, null on a day with no snapshot; `foreign_served` also carries `base`, the registered participants of that day. `concentration_ap`, `concentration_ap_country`, `foreign_served` and `penetration` have no history before their first snapshot. A day with no snapshot is absent, not 0. The series starts 2026-08-02.

## Query parameters

- `stat` 'ap_switching' | 'cross_border' | 'smp_switching' | 'growth' | 'concentration_ap' | 'concentration_ap_country' | 'concentration_smp' | 'foreign_served' | 'penetration'
- `from` string, date
- `to` string, date

## Response `200`

The daily series of one statistic.

- NetworkStatsHistory
  - `stat` 'ap_switching' | 'cross_border' | 'smp_switching' | 'growth' | 'concentration_ap' | 'concentration_ap_country' | 'concentration_smp' | 'foreign_served' | 'penetration', required
  - `from` string, date, required
  - `to` string, date, required
  - `since` string, date, required
  - `kind` 'flow' | 'stock', required
  - `keys` string[], required: The keys of `values`. `pct` and `mean_7d` are computed on the first.
  - `series` object[], required
    - `day` string, date, required
    - `gap` boolean, required: Flow statistics only: the day had no completed change scan.
    - `values` object, nullable, required: null on a gap day (flow) or a day with no snapshot (stock). Never read a gap as 0.
    - `base` integer, nullable, required: The divisor of `pct`. Flow: registered participants at the end of the day before, carried forward over missing days; for `cross_border`, all AP moves of the day. `foreign_served`: registered participants at the end of the day. null for the other stock statistics.
    - `pct` number, nullable, required: Flow only: 100 × first key / base.
    - `mean_7d` number, nullable, required: Flow only: mean of the first key over the days of the 7 days to `day` that had a change scan; null when every day is a gap.

## Other responses

- `400`: A missing or unknown `stat`, an invalid `from` or `to`, or a window over 366 days.

---

[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)
