---
title: "List global change events"
method: GET
path: "/v1/events"
tags: ["Events"]
---

# List global change events

`GET /v1/events`

## Request

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

Every typed change event, newest-first, cursor-paginated. Any anomaly an event triggered is embedded on it. `cursor` walks older events; `prev_cursor` walks the newer edge (for live polling). The first page carries a `meta` block with exact type facets + filter count and an auto-bucketed timeline chart.

## Query parameters

- `type` string[]
- `host` string
- `seat` string
- `participant` string
- `doctype` string
- `since` string, date-time
- `until` string, date-time
- `prev_cursor` string
- `limit` integer
- `cursor` string

## Response `200`

A page of change events.

- EventFeedPage: A cursor page of change events with a prev cursor and first-page meta.
  - `items` GlobalEvent[], required
    - `id` string, required
    - `type` 'participant_registered' | 'participant_deregistered' | 'participant_smp_changed' | 'endpoint_changed' | 'doctype_support_changed' | 'ap_seat_changed' | 'host_cert_rotated' | 'hosting_changed' | 'directory_card_changed', required
    - `hostname` string, nullable, required
    - `observed_at` string, date-time, required
    - `payload` object, required: Type-specific change detail. An `endpoint_changed` event is one row per real (from, to, transportProfile) change and lists the affected document types in a `doctypes` array; rows written before the merge carry a singular `doctype`.
    - `anomalies` AnomalyRef[], required
      - `id` string, required
      - `detector` 'cert_identity_shift' | 'off_cadence_rotation' | 'endpoint_off_footprint' | 'moved_to_unverified_seat' | 'mass_change_burst' | 'split_id_registration' | 'host_tls_cert_expired' | 'host_tls_cert_expiring', required
      - `grade` 'notice' | 'warning' | 'info', required
  - `next_cursor` string, nullable, required
  - `prev_cursor` string, nullable, required: Newer-direction cursor (newest row on the page); the live-mode watermark.
  - `meta` EventFeedMeta: First-page events metadata: exact type facets + filter count (the events table is small enough for exact aggregation), an estimated total, and an auto-bucketed timeline chart over the (filtered) window.
    - `total_count` integer, required: Estimated total (pg_class.reltuples).
    - `total_count_estimated` boolean, required
    - `filter_count` integer, nullable, required: Exact count matching active filters, or null when none is active.
    - `facets` object, required: Exact per-type counts under the non-type filters.
    - `chart_bucket` 'hour' | 'day' | 'week', required
    - `chart_data` EventChartBucket[], required
      - `bucket_start` string, date-time, required
      - `count` integer, required

## Other responses

- `400`: An invalid `type`, `participant`, `since`, `until`, `limit`, `cursor` or `prev_cursor`.

---

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