---
title: "Software landscape"
method: GET
path: "/v1/stats/software"
tags: ["Software"]
---

# Software landscape

`GET /v1/stats/software`

## Request

- Base URL: `https://api.peppolstatus.com`
- URL: `https://api.peppolstatus.com/v1/stats/software`
- Auth: none required

The free host-software landscape (issue #490): k-anonymised vendor share (k=5, the sub-k tail folded into `other`), version distribution within each named vendor (k=10), ASN hosting share, and a two-denominator coverage block (host-weighted ~90% and participant-weighted ~50%, each named, no bare coverage scalar). Computed live from the temporal software table and edge-cached. Names no operator. Keyless-cacheable.

## Response `200`

The software landscape aggregates.

- object
  - `vendors` object[], required: Vendor-share cells (k=5); `engine` is a catalogue engine or the `other` fold.
    - `engine` string, required
    - `hosts` integer, required
    - `probed` integer, required
    - `reported` integer, required
    - `share` number, required
  - `versions` object, required: Per-engine version distribution (k=10), keyed by engine name.
  - `hosting` object[], required: ASN hosting-share cells (no k — an ASN names no operator).
    - `value` string, required
    - `hosts` integer, required
    - `share` number, required
  - `coverage` object, required: Both denominators side by side, each named (spec §8).
    - `host_weighted` SoftwareCoverageBreakdown, required: One named coverage denominator (spec §8). The `identified` share splits probed observations vs self-reported claims; the not-identified share splits by reason (edge_masked / floor / pending). k does not apply to coverage cells.
      - `denominator_name` string, required: e.g. `host_role_targets` or `distinct_participants_served`.
      - `total` integer, required
      - `identified` object, required
        - `count` integer, required
        - `probed` integer, required
        - `reported` integer, required
      - `not_identified` object, required
        - `edge_masked` integer, required
        - `floor` integer, required
        - `pending` integer, required
    - `participant_weighted` SoftwareCoverageBreakdown, required: One named coverage denominator (spec §8). The `identified` share splits probed observations vs self-reported claims; the not-identified share splits by reason (edge_masked / floor / pending). k does not apply to coverage cells.
      - `denominator_name` string, required: e.g. `host_role_targets` or `distinct_participants_served`.
      - `total` integer, required
      - `identified` object, required
        - `count` integer, required
        - `probed` integer, required
        - `reported` integer, required
      - `not_identified` object, required
        - `edge_masked` integer, required
        - `floor` integer, required
        - `pending` integer, required
  - `denominator` object, required
    - `identified_targets` integer, required
    - `total_targets` integer, required
  - `generated_at` string, date-time, required

---

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