---
title: "Get moves between providers"
method: GET
path: "/v1/stats/provider-moves"
tags: ["Participants"]
---

# Get moves between providers

`GET /v1/stats/provider-moves`

## Request

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

The from→to matrix of participants that changed Access Point provider in a trailing window: who lost participants to whom, for the whole network, in one call. The `top` largest providers on each side keep their identity (`from` = sources, `to` = destinations; a provider can be on both). Every other provider folds into one "Other" node per side, and `other` gives the number of folded providers and their participants.

`pairs` is the COMPLETE folded matrix, largest first: a `null` `from` or `to` is the "Other" node of that side, zero cells are omitted, and the values sum to `total` exactly. A node's `value` is all its moves in the window, also the moves to or from a folded provider.

A move inside one provider (between two of its own Access Points) is not counted. Every day is the PROBE-OBSERVATION day — when the change scan saw the SMP record change — not the day a migration was executed. A window with no moves returns `total: 0` and empty lists.

PLATFORM MOVES. A mover is a platform move when the platform that serves the participant stayed and only the certificate Seat changed: it is not a customer decision. The verdict is per DIRECTED provider pair (from → to), over all its movers since 2026-08-02, with one of two reasons (`same_host`, `sub_provider`): at least 90% of the movers whose endpoint host can be compared (5 or more, and at least 50% of all movers of the pair) kept their endpoint host, or at least 90% of 25 or more movers still carry, at the new provider, the sub-provider brand of the provider they left. It is a CURRENT judgment, computed again on every rollup cycle. The movers of a platform-move pair are in no node, in no cell and not in `total`: `platform` gives their number and the number of directed provider pairs they come from. The matrix has Providers only; a Vendor is not in it.

`country_share` gives the movers of one country (FR) among all movers of the window that have a country. The matrix has no country filter; this share includes the platform moves.

## Query parameters

- `days` 7 | 30 | 90
- `top` integer

## Response `200`

The folded from→to matrix of provider switches.

- object
  - `window` object, required
    - `days` 7 | 30 | 90, required
    - `from` string, date, required: First day (UTC).
    - `to` string, date, required: Last day (UTC).
  - `total` integer, required: All participants that changed provider in the window, platform moves excluded.
  - `platform` object, required: The platform moves of the window. They are not in `total`.
    - `movers` integer, required: Participants in a platform move.
    - `pairs` integer, required: Directed provider pairs (from → to) those movers come from.
  - `country_share` object, nullable: The movers of one country among all movers of the window that have a country, platform moves included. null when the window has no mover.
    - `country` string, required: ISO 3166-1 alpha-2 country.
    - `movers` integer, required: Movers of that country.
    - `total` integer, required: All movers that have a country.
  - `from` object[], required: Named source providers, largest loss first.
    - `key` string, required: The `/v1/aps/{key}` handle.
    - `name` string, required
    - `value` integer, required: Participants this provider lost in the window.
  - `to` object[], required: Named destination providers, largest gain first.
    - `key` string, required: The `/v1/aps/{key}` handle.
    - `name` string, required
    - `value` integer, required: Participants this provider gained in the window.
  - `other` object, required: The providers that are not named, folded per side.
    - `from` object, required
      - `providers` integer, required: How many providers the fold holds.
      - `value` integer, required: Participants those providers lost or gained.
    - `to` object, required
      - `providers` integer, required: How many providers the fold holds.
      - `value` integer, required: Participants those providers lost or gained.
  - `pairs` object[], required: The complete folded matrix, largest first. `null` on a side is the "Other" node of that side. The values sum to `total`.
    - `from` string, nullable, required: Source provider key, or null for "Other".
    - `to` string, nullable, required: Destination provider key, or null for "Other".
    - `value` integer, required: Participants that made this move.

## Other responses

- `400`: An invalid `days`, `country` or `top`.

---

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