---
title: "PeppolStatus API documentation & developer resources"
description: "PeppolStatus exposes everything it measures through a public, read-only REST API at api.peppolstatus.com. A few aggregate endpoints are keyless; everything else needs a paid API key."
canonical: "https://peppolstatus.com/developers/"
last-updated: 2026-08-09
---

# PeppolStatus API documentation & developer resources

PeppolStatus exposes everything it measures through a public, read-only REST API at
[api.peppolstatus.com](https://api.peppolstatus.com). A few aggregate endpoints are
keyless; everything else needs a paid API key. The specification, interactive
reference, and guides are all linked below.

## The PeppolStatus API

The base URL is `https://api.peppolstatus.com`. The API is **read-only**. A small set of
aggregate endpoints is **keyless** — `/v1/network`, `/v1/stats/participants`, and the
meta/discovery endpoints. **Every other endpoint requires a paid API key**
(`pps_live_…` / `pps_test_…`), issued in the console at
[app.peppolstatus.com](https://app.peppolstatus.com) and managed at
[app.peppolstatus.com/keys](https://app.peppolstatus.com/keys). Send it as
`Authorization: Bearer <key>` or `X-API-Key: <key>`. Requests to a paid endpoint
without a valid key (or below its tier) return **403** `application/problem+json`
pointing at [peppolstatus.com/#pricing](https://peppolstatus.com/#pricing). Two tiers
cover operational (Network) and commercial (Market) data.

Anonymous requests are limited to **60 requests per 60 seconds** per IP; a paid key
raises the limit. Limits are reported on every response via `RateLimit-*` headers. Only
`GET`, `HEAD`, and `OPTIONS` are allowed. CORS
is open (`Access-Control-Allow-Origin: *`), so you can call the API directly from a
browser. List endpoints use cursor pagination — `{ items, next_cursor }` — and
participant IDs use the canonical `scheme::value` form, e.g. `0208::0762747721`.

```sh
# Network-wide rollup
curl https://api.peppolstatus.com/v1/network

# Newest Belgian participants, 5 per page
curl "https://api.peppolstatus.com/v1/participants?country=BE&limit=5"

# One participant's current state (scheme::value)
curl "https://api.peppolstatus.com/v1/participants/0208::0762747721"
```

## PeppolStatus developer resources

- [API reference (Scalar, interactive)](https://api.peppolstatus.com/) — browse and try every endpoint in an interactive reference.
- [OpenAPI 3.1 specification](https://api.peppolstatus.com/openapi.json) — machine-readable spec for code generation and tooling.
- [API quickstart (Markdown)](https://peppolstatus.com/api.md) — base URL, endpoint families, conventions, and curl examples.
- [Authentication guide (auth.md)](https://peppolstatus.com/auth.md) — how auth works: keyless aggregate endpoints, paid API keys and tiers, no OAuth.
- [llms.txt](https://peppolstatus.com/llms.txt) — a structured index of these resources for LLMs and agents.
- [API catalog (RFC 9727)](https://peppolstatus.com/.well-known/api-catalog) — machine-discoverable catalog of the API and its spec.
- [Agent skill (SKILL.md)](https://peppolstatus.com/.well-known/agent-skills/peppolstatus-api/SKILL.md) — a drop-in skill describing how to use the PeppolStatus API.
- [Health endpoint](https://api.peppolstatus.com/health) — liveness check returning `{"status":"ok"}`.

## Endpoint families

Everything lives under `/v1`. All responses are JSON; errors use RFC 9457
`application/problem+json`.

- **network** — At-a-glance rollup: host verdict counts, open incidents, anomalies in the last 24h.
- **hosts** — Monitored SMP/AP hosts: current verdict, latency, 24h uptime, per-host incidents and uptime aggregates.
- **incidents** — Global incident feed, open and closed, newest-first.
- **participants (+events/history)** — Peppol participants: filterable list, current state, change events, temporal history.
- **stats/participants** — Global facet counts (country, scheme, SMP, AP, registered share) plus an estimated total.
- **providers** — OpenPeppol member registry and curated provider detail.
- **aps (+churn)** — Access-point directory with rosters; churn — joiners, movers in/out, leavers — per AP.
- **seats** — Certificate seats — the machine identity of a provider.
- **events** — Global typed change-event feed (registrations, migrations, cert rotations) with embedded anomalies.
- **anomalies** — Deterministic detector anomalies, graded notice or warning.
- **sml** — SML/SMK zone canary status and DNAME cutover state.

## For agents & LLMs

Every HTML page on `peppolstatus.com` also serves a Markdown variant — request it with
`Accept: text/markdown`. All HTML responses carry RFC 8288 `Link` headers pointing at the
API catalog and the OpenAPI specification, so agents can discover the machine interface
from any page.

## Support

Email [hello@peppolstatus.com](mailto:hello@peppolstatus.com). PeppolStatus is built by
the engineers at [e-invoice.be](https://e-invoice.be).
