---
title: "Get a participant's current state"
method: GET
path: "/v1/participants/{id}"
tags: ["Participants"]
---

# Get a participant's current state

`GET /v1/participants/{id}`

## Request

- Base URL: `https://api.peppolstatus.com`
- URL: `https://api.peppolstatus.com/v1/participants/{id}`
- Auth: none required

Directory presence, SML registration + current SMP, business card, the company-register enrichment block, endpoints and serving seats for a Peppol participant. Discovered participants carry no card; unmatched participants carry company: null.

## Path parameters

- `id` string, required

## Response `200`

The participant's state.

- ParticipantView
  - `id` string, required: Canonical `scheme::value`.
  - `scheme` string, required
  - `value` string, required
  - `provenance` 'directory' | 'discovered', required
  - `directory` object, required
    - `present` boolean, required
    - `since` string, date-time, nullable, required
  - `registration` ParticipantRegistration, required
    - `registered` boolean, required
    - `since` string, date-time, nullable, required
    - `smp` string, nullable, required
  - `card` ParticipantCard, nullable, required
    - `name` string, nullable, required
    - `countryCode` string, nullable, required
    - `registrationDate` string, date, nullable, required: ISO 8601 date (YYYY-MM-DD).
  - `joinDate` string, date, nullable, required: Derived network join date (issue #222), or null when unknown. The real 'joined the network' signal, distinct from first_seen.
  - `joinDateSource` 'registration_date' | 'first_seen' | 'unknown', required: Where joinDate came from.
  - `company` ParticipantCompany, nullable, required: Company-register enrichment (spec §8.1): the participant's current registry facts via participant_company_link, or null when unmatched. Snake_case. The natural-person name gate is applied in the payload: is_natural_person rows return name: null with name_withheld: true, other facts intact.
    - `name` string, nullable, required
    - `name_withheld` boolean, required
    - `is_natural_person` boolean, nullable, required
    - `legal_form_code` string, nullable, required
    - `legal_form_label` string, nullable, required
    - `activity_code` string, nullable, required
    - `activity_nomenclature` string, nullable, required
    - `size_class` string, nullable, required: Size band code, or null: the INSEE trancheEffectifs codes for FR (e.g. `21`; `NN` = unknown), and for NO the same code set plus `1-4`. No other register has a size.
    - `size_class_label` string, nullable, required: English size band label of size_class (e.g. 21 → "50–99 employees"). Equal to the code when the code is unknown; null when size_class is null.
    - `status` string, nullable, required
    - `status_detail_code` string, nullable, required: The register's native status nuance (for example a KBO juridical situation or an open insolvency procedure). The value `foreign_taxpayer` (Slovenia) marks a taxpayer with a Slovenian tax number and no record in the Slovenian Business Register: the record is active and linked, has no name, and is not counted in the adoption statistics.
    - `incorporation_date` string, date, nullable, required: ISO 8601 date (YYYY-MM-DD).
    - `region` string, nullable, required: Seat region code, or null: a bare INSEE région code for FR (e.g. `84`); ISO 3166-2 for BE, NO and SK (e.g. `BE-VLG`). No other register has a region.
    - `region_label` string, nullable, required: Region name of region in the local language, by the country of the register (e.g. 84 → "Auvergne-Rhône-Alpes"). Equal to the code when the code is unknown; null when region is null.
    - `postcode` string, nullable, required
    - `vat_liable` boolean, nullable, required: VAT-registered per the register (BE: KBO VAT activities — the e-invoicing mandate scope); null where the register has no VAT signal (FR).
    - `snapshot_date` string, date, nullable, required: Register publication date of the latest successful sync run.
  - `endpoints` ParticipantEndpointView[]
    - `doctype` string, required
    - `transport_profile` string, required
    - `url` string, required
    - `seat` SeatRef, required
      - `seat_id` string, required
      - `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.
  - `seats` SeatRef[]
    - `seat_id` string, required
    - `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.

## Other responses

- `400`: `id` is not a `scheme::value` Peppol identifier.
- `404`: No such participant is known.

---

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