---
name: peppolstatus-api
description: Query the PeppolStatus public read-only API for live Peppol network data — host liveness, incidents, uptime, participants, providers, access points, change events, anomalies and SML zone status. No authentication required.
---

# PeppolStatus API

Public, read-only REST API monitoring the Peppol e-invoicing network.

- Base URL: `https://api.peppolstatus.com`
- OpenAPI 3.1 spec: `https://api.peppolstatus.com/openapi.json` (fetch this for full parameter and schema detail)
- Human docs: `https://api.peppolstatus.com/docs`
- Health check: `GET /health` → `{"status":"ok","service":"api"}` (DB reachability: `GET /health/db`)
- No authentication required. `Authorization: Bearer <key>` is accepted and optional (free keys at https://app.peppolstatus.com/sign-up, format `pps_live_…`/`pps_test_…`); there is no OAuth server.
- GET/HEAD/OPTIONS only. JSON responses; errors are RFC 9457 `application/problem+json`. CORS allow-origin `*`.
- Rate limit: 60 requests / 60s; watch the `RateLimit-*` response headers.

## Key endpoint patterns

- `GET /v1/network` — network-wide rollup: host verdict counts, open incidents, anomalies (last 24h). Start here for "is Peppol healthy?".
- `GET /v1/hosts` — every monitored SMP/AP host with current verdict, latency and 24h uptime, worst-first.
- `GET /v1/hosts/{hostname}` — one host's current state (`?at=` for a past instant); `…/incidents` and `…/uptime?resolution=hourly|daily|monthly` for detail.
- `GET /v1/incidents?status=open` — global incident feed; filters: `host`, `status`, `since`.
- `GET /v1/participants` — participant list; filters: `country`, `scheme`, `smp`, `ap`, `registered`, `provenance`, free-text `q`; `sort` (e.g. `first_seen.desc`).
- `GET /v1/participants/{id}` — participant state; `id` is canonical `scheme::value` (e.g. `0208::0762747721`); `…/events` and `…/history` for changes over time.
- `GET /v1/stats/participants` — global facet counts per country/scheme/SMP/AP.
- `GET /v1/providers` and `/v1/providers/{slug}` — provider registry and curated detail.
- `GET /v1/aps`, `/v1/aps/{key}`, `…/churn`, `…/churn/participants?category=joiner|mover_in|mover_out|leaver` — access-point directory and churn.
- `GET /v1/seats/{seatId}` — certificate seat (machine identity of a provider).
- `GET /v1/events` — typed change-event feed; filter with `type` (e.g. `participant_registered`, `endpoint_changed`, `host_cert_rotated`), `host`, `seat`, `participant`, `since`, `until`.
- `GET /v1/anomalies?grade=warning` — detector anomalies; `/v1/anomalies/{id}` for one.
- `GET /v1/sml` — SML/SMK zone canary status and cutover state.

## Pagination

List endpoints are cursor-paginated: responses are `{ "items": [...], "next_cursor": "..." }`.
Pass `cursor=<next_cursor>` to fetch the next page and `limit` to size pages.
`/v1/events` additionally supports `prev_cursor` to poll the newer edge.
