---
title: "Search public procurement notices"
method: GET
path: "/api/v1/tenders"
tags: ["Public Procurement"]
---

# Search public procurement notices

`GET /api/v1/tenders`

Cursor-paginated PLACSP notice search over the materialized legal-first projection. The query contract is closed-world and scalar: unknown names, arrays and lexical type mismatches return 400; validly typed values outside documented ranges return 422. Full-text query indexes notice object and buyer only; it never indexes supplier names. Full-text plus structured filters returns 422 until a compound offline projection exists. CPV accepts an indexed 2-8 digit prefix, may combine only with published_from/published_to, and returns 503 rather than falling back when its CPV-date projection or exact index is unavailable. supplier_cif is resolved by the generation-bound offline 0062 projection and matches either the notice's top-level corporate adjudicatario or any materialized corporate coadjudicator. It may combine with phase, buyer_nif, province and publication dates; open_only and every monetary filter require a future compound projection and return 422. Because one notice can have several adjudicators, a search summary may display a different admitted top-level supplier; tender detail retains the complete materialized result set. Natural-person supplier names and identifiers are withheld together. Budget, estimated value and award are separate source-reported fields and none proves paid or executed spend. open_only freezes one UTC date for SQL filtering, row is_open semantics and cursor binding.

## Query parameters

- `q` string
- `cpv` string
- `phase` 'PUB' | 'PRE' | 'EV' | 'ADJ' | 'RES' | 'ANUL'
- `province` string
- `buyer_nif` string
- `supplier_cif` string
- `open_only` boolean
- `amount_kind` 'budget' | 'estimated' | 'award'
- `min_amount_eur` number
- `max_amount_eur` number
- `published_from` string, date
- `published_to` string, date
- `limit` integer
- `cursor` string

## Response `200`

Sanitized notice page

- TenderSearchResponse
  - `schema_version` string, required
  - `count` integer, required
  - `items` TenderNotice[], required
    - `key` string, required
    - `folder_id` string, nullable, required
    - `object` string, required
    - `buyer` TenderParty, required
      - `name` string, nullable
      - `cif` string, nullable — Corporate CIF only.
      - `nif` string, nullable — Public-body NIF; never a supplier DNI/NIE.
      - `dir3` string, nullable
      - `company_slug` string, nullable
      - `withheld` boolean
    - `supplier` TenderParty, required
      - `name` string, nullable
      - `cif` string, nullable — Corporate CIF only.
      - `nif` string, nullable — Public-body NIF; never a supplier DNI/NIE.
      - `dir3` string, nullable
      - `company_slug` string, nullable
      - `withheld` boolean
    - `supplier_withheld` boolean, required
    - `cpv` string, nullable, required
    - `cpv_codes` string[], required
    - `contract_type` string, nullable, required — Raw CODICE code when no verified codelist label is available.
    - `procedure` string, nullable, required — Raw CODICE code when no verified codelist label is available.
    - `amounts` object, required
      - `budget_total` TenderMoney, required
        - `value` number, nullable, required
        - `currency` string, nullable, required
      - `budget_tax_exclusive` TenderMoney, required
        - `value` number, nullable, required
        - `currency` string, nullable, required
      - `estimated_total` TenderMoney, required
        - `value` number, nullable, required
        - `currency` string, nullable, required
      - `award_payable_total` TenderMoney, required
        - `value` number, nullable, required
        - `currency` string, nullable, required
    - `reported_amount_eur` number, nullable, required — Compatibility field: award_payable_total only when its currency is EUR. Not proof of payment/executed spend.
    - `reported_tax_exclusive_amount_eur` number, nullable, required
    - `amount_quality` string, required — Projection quality marker such as complete, separated_reported, missing, legacy_withheld or outlier_withheld.
    - `amount_semantics` string, required
    - `phase` 'PUB' | 'PRE' | 'EV' | 'ADJ' | 'RES' | 'ANUL' | 'null', nullable, required
    - `phase_description` string, nullable, required
    - `published_at` string, date, nullable, required
    - `awarded_at` string, date, nullable, required
    - `formalised_at` string, date, nullable, required
    - `submission_deadline` string, date, nullable, required
    - `is_open` boolean, required
    - `province` string, nullable, required
    - `province_slug` string, nullable, required
    - `document_count` integer, required
    - `lot_count` integer, required
    - `result_count` integer, required
    - `supplier_count` integer, required
    - `official_url` string, uri, nullable, required
    - `parser_version` string, nullable, required
    - `source` 'PLACSP', required
  - `page` object, required
    - `limit` integer, required
    - `has_more` boolean, required
    - `next_cursor` string, nullable, required
  - `ordering` 'published_desc' | 'ingestion_desc' | 'cpv_prefix_published_desc' | 'deadline_asc' | 'budget_amount_desc' | 'estimated_amount_desc' | 'award_amount_desc', required
  - `filters` TenderSearchFilters, required
    - `q` string, nullable, required
    - `cpv` string, nullable, required
    - `phase` string, nullable, required
    - `buyer_nif` string, nullable, required
    - `supplier_cif` string, nullable, required
    - `province` string, nullable, required
    - `published_from` string, nullable, required
    - `published_to` string, nullable, required
    - `amount_kind` string, nullable, required
    - `min_amount_eur` number, nullable, required
    - `max_amount_eur` number, nullable, required
    - `open_only` boolean, required
  - `coverage` TenderCoverage, required
    - `projection` string, nullable
    - `lots` string, nullable
    - `multiple_cpv` string, nullable
    - `supplier_edges` string, nullable
    - `documents` string, nullable
    - `cpv_prefix_filter` string, nullable — Indexed offline 2-8 digit prefix coverage; undated projection rows are excluded.
    - `projection_generation` string — Immutable PLACSP projection generation used for this response.
    - `company_public_generation` string — Immutable company_public_v2 generation that revalidated the requested company identity.
  - `attribution` string, required
  - `disclaimer` 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
- `422` — A validly typed value is outside its documented range, a lower bound exceeds its upper bound, full-text is combined with a structured filter, CPV plus a non-date structured filter requires an offline compound projection, or supplier_cif is combined with open_only or any monetary filter before its compound offline projection exists
- `429` — Rate limit exceeded
- `500` — The bounded operation failed without exposing internal exception details.
- `503` — PLACSP dataset, public FTS, CPV prefix projection or exact CPV-date index unavailable

---

[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/revisions/996f96a11758/schema)
