---
title: "Get non-personal procurement coverage metrics"
method: GET
path: "/api/v1/tenders/stats"
tags: ["Public Procurement"]
---

# Get non-personal procurement coverage metrics

`GET /api/v1/tenders/stats`

Publishes O(1) materialized record, freshness, document, geography and CODICE-v3 coverage. Monetary rollups are deliberately omitted even though amount semantics are separated.

## Response `200`

Coverage and quality metrics

- TenderStats
  - `schema_version` string, required
  - `total_records` integer, required
  - `open_records` integer, required
  - `records_with_documents` integer, required
  - `latest_publication_date` string, date, nullable, required
  - `geography` TenderGeography, required
    - `matched_records` integer, required
    - `coverage_percent` number, required
    - `warning` string, required
  - `data_quality` TenderDataQuality, required
    - `v3_records` integer, required
    - `multi_lot_records` integer, required
    - `multi_cpv_records` integer, required
    - `multi_supplier_records` integer, required
    - `withheld_supplier_records` integer, required
    - `amount_semantics` string, required
  - `projection` object, required
    - `schema_version` '1.2', required
    - `generation` string, required
    - `projected_at` string, date-time, required
  - `attribution` string, required
  - `_source_catalog` SourceCatalogEnvelope, required
    - `catalog_version` string, required
    - `policy_fingerprint` string, required
    - `policy_effective_date` string, date
    - `sources` object, required
  - `_data_sources_used` PublicSourcePolicyMetadata[], required
    - `slug` string, required
    - `name` string, required
    - `license` string, required
    - `license_url` string, uri, nullable
    - `attribution_required` boolean, required
    - `attribution_text` string, nullable
    - `official_url` string, uri, nullable
    - `reuse_conditions` string, required — Condiciones de reutilizacion que el consumidor debe conservar al presentar o transformar el dato.
    - `policy_effective_date` string, date, required
    - `reviewed_at` string, date, required
    - `data_updated_at` string, date-time, nullable
    - `catalog_version` string, required
  - `_attributions` object

## Other responses

- `400` — Invalid request
- `429` — Rate limit exceeded
- `500` — The bounded operation failed without exposing internal exception details.
- `503` — The public read failed closed because its legal source catalog, subject classification, bounded projection, database helper or required artifact is unavailable. Clients must not infer an empty result.

---

[API](https://skmtc.net/openmercantil/apis/openmercantil-public-api.md) · [All operations](https://skmtc.net/openmercantil/apis/openmercantil-public-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/openmercantil/openmercantil-public-api/versions/996f96a11758/schema)
