---
title: "List SMPs"
method: GET
path: "/v1/smps"
tags: ["SMPs"]
---

# List SMPs

`GET /v1/smps`

## Request

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

The SMP directory: every current SMP hostname with the seat(s) and provider that sign its metadata, busiest first. A hostname is listed if it currently homes participants (from the participant rollup's `smp` facet) or carries an open `smp-signing` certificate. `participant_count` comes from that bounded top-N facet, so a hostname with a signing cert but outside the top-N carries a null count (unknown), not zero. The provider is resolved from the most-recent open signing cert with the precedence curated mapping (verified) → unverified cert-CN — the same as `/v1/aps`. `provider` is who OPERATES the host; `owner` names the party the curated registry says OWNS it, and is set only when that is a different party (a shared registry SMP served under another party's cert), else null. Not paginated (the envelope's `next_cursor` is always null).

## Query parameters

- `q` string
- `limit` integer

## Response `200`

The SMP directory.

- SmpPage: The SMP directory (never paginated; next_cursor null).
  - `items` SmpView[], required
    - `smp` string, required: The SMP hostname (lowercased FQDN).
    - `participant_count` integer, nullable, required: Participants currently homed on this SMP (from the rollup's `smp` facet). Null when the hostname sits outside that bounded top-N facet — unknown, not zero.
    - `seat_ids` string[], required: SeatIDs with an open `smp-signing` cert on this hostname (sorted).
    - `cert_org` string, nullable, required: `O=` of the most-recent open `smp-signing` cert, else null.
    - `provider` SeatProvider, required: Embedded provider for a seat, verified mapping or unverified CN fallback.
      - `slug` string, nullable, required
      - `name` string, nullable, required
      - `country` string, nullable, required
      - `verified` boolean, required
      - `key` string, nullable: The curated provider's OpenPeppol registry natural key, when the mapping carries one. It decides whether the seat's operator and a host's owner are the same party; it is not a /v1/aps route key and not the slug. Optional: absent on a cached response minted before the field shipped.
    - `owner` SmpOwner, required
      - `key` string, required: The owning provider's registry `natural_key`. NOT a `/v1/aps/{key}` route key — an owner that operates nothing has no access point page.
      - `name` string, required: Trade name, falling back to the legal name when there is no trade name.
      - `country` string, nullable, required: ISO 3166-1 alpha-2 country, else null.
  - `next_cursor` string, nullable, required: Opaque cursor for the next page, or null on the last page.

## Other responses

- `400`: The `limit` query param is not a non-negative integer.

---

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