---
title: "Get a seat's compliance scorecard"
method: GET
path: "/v1/seats/{seatId}/compliance"
tags: ["Seats"]
---

# Get a seat's compliance scorecard

`GET /v1/seats/{seatId}/compliance`

## Request

- Base URL: `https://api.peppolstatus.com`
- URL: `https://api.peppolstatus.com/v1/seats/{seatId}/compliance`
- Auth: one of:
  - HTTP bearer
  - API key in header `X-API-Key`

One seat's compliance posture: the registrations under it, its OPEN findings broken down by rule, the daily trend, and where the seat sits against the network. This is what a Peppol Authority's periodic scan reports, from the same published rules (`GET /v1/compliance/rules`), before the letter arrives.

Rates are open findings per 1,000 registrations, and `null` when the seat hosts no registrations. The network median and 90th percentile are taken over every seat that hosts registrations — a seat with no finding of a rule counts as 0 — so they describe the whole network, not only the seats that break the rule.

Read from a daily rollup: `snapshot_date` is the day it describes, and is `null` (with zero counts and empty lists) for a seat no scan has covered yet.

## Path parameters

- `seatId` string, required

## Query parameters

- `days` integer

## Response `200`

The seat's compliance scorecard.

- SeatComplianceScorecard: One seat's compliance posture on the newest scanned day.
  - `seat_id` string, required
  - `snapshot_date` string, date, nullable, required: The day the card describes; null when no scan has covered the seat.
  - `computed_at` string, date-time, nullable, required
  - `registrations` integer, required: Registrations whose access point is this seat.
  - `open_findings` integer, required
  - `by_grade` object, required: Open findings by grade.
    - `fatal` integer, required
    - `warning` integer, required
    - `notice` integer, required
  - `open_per_1k` number, nullable, required
  - `network_median_open_per_1k` number, nullable, required
  - `network_p90_open_per_1k` number, nullable, required
  - `peer_seat_count` integer, required
  - `rules` SeatComplianceRule[], required
    - `rule_code` string, required: The rule's stable public code.
    - `title` string, required: The rule's human title.
    - `grade` 'fatal' | 'warning' | 'notice', required
    - `open_findings` integer, required: Open findings of this rule.
    - `open_per_1k` number, nullable, required
    - `network_median_open_per_1k` number, nullable, required
    - `network_p90_open_per_1k` number, nullable, required
    - `peer_seat_count` integer, required: Seats the network figures were taken over.
  - `trend` SeatCompliancePoint[], required
    - `snapshot_date` string, date, required
    - `registrations` integer, required
    - `open_findings` integer, required
    - `fatal` integer, required
    - `warning` integer, required
    - `notice` integer, required
    - `open_per_1k` number, nullable, required
    - `network_median_open_per_1k` number, nullable, required

## Other responses

- `400`: `days` is not a whole number of days in 1…365.

---

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