list_participants
List participants
The participant set, keyset-paginated. Default sort is first-seen newest-first. Comma-array filters (country, scheme, smp, ap, doctype, transport_profile, host, provenance, and the company-register cuts entity_type, sector, size, region, postcode), the single-valued sub_provider cut, registered + vat_liable booleans, and a smart q (a full Peppol ID or a bare identifier number matches the ID; other text is a name search on the business-card name or the company-register name — see q). First-page meta carries estimated totals and rollup facets; meta.filter_count is a bounded exact count that degrades to null (never an error) if it exceeds the query timeout. A name search that exceeds the query timeout returns an empty first page with meta.search_degraded, and a 503 on a later page. Discovered participants carry no name/card fields (privacy).
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Smart search. A full Peppol ID (`scheme::value`, or a bare `icd:value`) matches that ID exactly. A bare identifier number (digits only, 4 or more) matches the participants whose ID is that number under any ICD prefix, and also names that contain it. Any other text is a name search: it matches the business-card name or the company-register name. The words can be in any order. All words must match (at most 8 words are used). Case, accents and punctuation are ignored. The search needs at least one word of 3 or more characters, else 400. A name that the response withholds is not searchable: the card name of a `discovered` participant and the register name of a natural person. If a name search exceeds the query timeout, the first page is returned empty with `meta.search_degraded: true`; a later page (with `cursor`) returns 503. Neither is cacheable. Use a narrower term. | |
| ap | No | Comma-array of serving Access Point SeatIDs (`PBE000123,PNO000456`). | |
| smp | No | Comma-array of current SMP hostnames (`smp1.example,smp2.example`). | |
| host | No | Comma-array of endpoint-URL hostnames (`ap.example.com`). Matches a participant if ANY of its current endpoints publishes an endpoint URL on one of the given hosts — the exact participant set an Access Point host serves. Case-insensitive. Used ALONE (no other filter) results are ordered by identifier and `sort` is ignored; combined with another filter the requested `sort` applies. | |
| size | No | Comma-array of company size band codes, as stored (`12,21`): the INSEE trancheEffectifs codes for FR (`NN` = unknown), and for NO the same code set plus `1-4`. | |
| sort | No | Sort + keyset key. `registered`, `entity_type` (the Type column) and `sector` (the Activity / NACE-division column) order over `(<col>, first_seen_at, id)`; the `entity_type`/`sector` views show only enriched (non-null) participants. The `name` sort lists only participants that have a business-card name: a participant with only a company-register name is NOT in a `name`-sorted list (and not in its `meta.filter_count`), although `q` can find it under the other sorts. The `country` sort lists only participants with a country. It is IGNORED when `doctype`/`transport_profile`/`host` is set WITHOUT any other narrowing filter, and when `sub_provider` is set without `q` or one of those endpoint filters — those results are driven from the matching index and ordered by identifier (`scheme`, `value`), the only ordering that stays inside the query timeout. Otherwise (an endpoint filter combined with `country`/`smp`/`ap`/`registered`/`provenance`/`q`, or `sub_provider` with `q`) the normal sort applies. | first_seen.desc |
| limit | No | Page size, clamped to [1, 200]. Defaults to 50. | |
| cursor | No | Opaque pagination cursor returned as `next_cursor` by the previous page. | |
| region | No | Comma-array of company seat region codes (`BE-BRU,BE-VLG`). | |
| scheme | No | Comma-array of Peppol identifier schemes. | |
| sector | No | Comma-array of 2-digit NACE Rev. 2.1 divisions (`47,62`). | |
| country | No | Comma-array of ISO country codes (`BE,NL`). | |
| doctype | No | Comma-array of Peppol document type ids. Matches a participant if ANY of its current endpoints declares one of the given doctypes. Used ALONE (no other filter) results are ordered by identifier and `sort` is ignored; combined with another filter the requested `sort` applies. | |
| not_smp | No | Comma-array of SMP hostnames to EXCLUDE. Rows with no value are KEPT — excluding a value never drops the un-enriched remainder. Combines with its include twin: `?region=NO-03¬_region=NO-32` applies both. | |
| not_size | No | Comma-array of company size band codes (as stored: `21,NN`; FR and NO only) to EXCLUDE. Rows with no value are KEPT — excluding a value never drops the un-enriched remainder. Combines with its include twin: `?region=NO-03¬_region=NO-32` applies both. | |
| postcode | No | Comma-array of company seat postcodes. | |
| not_region | No | Comma-array of company seat region codes (`NO-32,BE-BRU`) to EXCLUDE. Rows with no value are KEPT — excluding a value never drops the un-enriched remainder. Combines with its include twin: `?region=NO-03¬_region=NO-32` applies both. | |
| not_sector | No | Comma-array of 2-digit NACE Rev. 2.1 divisions (`47,62`) to EXCLUDE. Rows with no value are KEPT — excluding a value never drops the un-enriched remainder. Combines with its include twin: `?region=NO-03¬_region=NO-32` applies both. | |
| provenance | No | Comma-array of provenance values. | |
| registered | No | Filter by current SML registration state. | |
| vat_liable | No | Filter by company VAT-liable / mandate-scope flag. | |
| entity_type | No | Comma-array of company legal-form families (`company`,`natural_person`,`association`,`public`), from the company-register enrichment denormalized onto the participant. | |
| not_country | No | Comma-array of country codes (`NO,SE`) to EXCLUDE. Rows with no value are KEPT — excluding a value never drops the un-enriched remainder. Combines with its include twin: `?region=NO-03¬_region=NO-32` applies both. | |
| sub_provider | No | ONE curated sub-provider (reseller) slug (`codabox`) — the same slugs `GET /v1/aps/{key}` reports in `sub_providers[].sub_provider`. Matches a participant the daily rollup fingerprinted to that brand on ANY of its current endpoints, from three signals: the SMP `ServiceDescription`, the SMP technical-contact domain, and the endpoint host. Only curated names resolve, so the free-text long tail is not addressable here. Unlike the other filters this one takes a single value: a comma list, or a value that is not a slug (lowercase alphanumerics, dash-separated), is a 400. The sub-provider is an ADDITIVE annotation — the `ap` seat stays the operator of record. Results are ordered by identifier (`scheme`, `value`) and `sort` is ignored, EXCEPT alongside `q` or `doctype`/`transport_profile`/`host`, where the requested `sort` applies. Combining it with any other filter (`country`, `scheme`, `smp`, `ap`, `registered`, `provenance`, `entity_type`, `sector`, `size`, `region`, `postcode`, `vat_liable`) evaluates that filter against the rollup's DAILY SNAPSHOT of those participant columns, not the live row — a participant changing SMP or country is reflected here on the next rollup. Those combinations report an exact `meta.filter_count` (`filter_count_source: "exact"`); adding `q` or an endpoint filter falls back to the bounded count. | |
| not_entity_type | No | Comma-array of company legal-form families (`company`,`natural_person`,`association`,`public`) to EXCLUDE. Rows with no value are KEPT — excluding a value never drops the un-enriched remainder. Combines with its include twin: `?region=NO-03¬_region=NO-32` applies both. | |
| transport_profile | No | Comma-array of transport profile ids (`peppol-transport-as4-v2_0`). Matches a participant if ANY of its current endpoints uses one of the given profiles. Used ALONE (no other filter) results are ordered by identifier and `sort` is ignored; combined with another filter the requested `sort` applies. |