# Public procurement of a Spanish company

Every day the Spanish Ministry of Finance publishes, in CODICE and under written reuse conditions, the tenders of the profiles hosted by the public-procurement platform and those of the aggregated regional platforms — close to half a million award results a year. This route finds a company by its NIF, as a winner (lot, result, amounts, buyer) and as a buyer when the public entity carries a NIF.

## What the route returns

Catalogue description, exactly as agents read it:

**Public-procurement record of a Spanish company from the Plataforma de Contratación del Sector Público (Ministry of Finance CODICE feeds, hosted profiles and aggregated regional platforms, since 2012): contracts WON matched by legal-person NIF — buyer (name, DIR3), subject, CPV, lot, result, award date, amounts in EUR, tenders received, SME flag — and notices ISSUED as a buyer; newest first, capped at 100. Never a natural-person winner. Reuse under the ministry's conditions.**

## Expected identifier

Legal-person **NIF**: one letter, seven digits, a check character (e.g. A28582013).

> ⚠️ A wrongly formatted identifier in the **path** returns `400` and is **not billed** — but it costs you a round trip. It is the leading cause of failed calls on the foreign routes. A **search** parameter, by contrast, is cleaned up: unsupported characters are stripped and the usable query is served.

## Extract from a genuinely paid response

Dated snapshot from 2026-09-18, truncated to one item per array and then cut for length. It is not live data. The full extract is served **free of charge** from [the samples surface](https://api.sirenic.eu/exemples/), and the schema from the OpenAPI document.

```
{
 "pays": "ES",
 "nif": "A28582013",
 "attributions": [
  {
   "id": "19724487",
   "flux": "licitaciones",
   "expediente": "26/030",
   "lien": "https://contrataciondelestado.es/wps/poc?uri=deeplink:detalle_licitacion&idEvl=JGc4e4Jv86zECtSnloz%2BZQ%3D%3D",
   "statut": "attribuée",
   "statut_source": "ADJ",
   "objet": "Ejecución de las obras del \"Proyecto de construcción para la prolongación de los andenes de las estaciones de la Línea 3 de Metrovalencia\"",
   "type_contrat": "travaux",
   "type_contrat_source": "3",
   "procedure": "ouvert",
   "procedure_source": "1",
   "cpv": [
    "45234121",
    "45234126"
   ],
   "nuts": "ES521",
   "budget_ht_eur": 2897272.46,
   "fonds_ue": false,
   "acheteur": {
    "nom": "Gerencia de Ferrocarrils de la Generalitat Valenciana",
    "dir3": null,
    "nif": "Q9650001B",
    "type": "7",
    "hierarchie": [
     "Ferrocarrils de la Generalitat Valenciana",
     "Comunidad Valenciana"
    ]
   },
   "mis_a_jour": "2026-09-17T18:10:24Z",
   "lot": null,
   "resultat": "attribué",
   "resultat_source": "8",
   "date_attribution": "2026-09-16",
   "montant_ht_eur": 2576254.67,
   "montant_ttc_eur": 3117268.15,
   "offres_recues": 9,
   "pme": false,
   "gagnant": {
    "nif": "A28582013",
    "nom_publie": "CHM OBRAS E INFRAESTRUCTURAS SA",
    "nuts": "ES521",
    "localite": "ALICANTE"
   }
  }
 ],
 "nombre_attributions": 1,
 "valeur_totale_ht_eur": 2576254.67,
 "tronque_attributions": false,
 "aucune_attribution": false,
 "avis_emis": [],
 "nombre_avis_emis": 0,
 "tronque_avis_emis": false,
 "stock": {
  "depuis": "2012",
 
…
```

## Price and billing

Price: **$0.02**. The authoritative amount is the one in the `402` quote returned by the route itself — not this text, which derives from the same grid but is still just a page.

An error response **cancels the payment**: a `400`, `404` or `503` is never billed. An upstream outage closes the route with a `503` rather than serving a degraded response.

## Calling the route

```
# 1. Le devis, sans rien payer : la route répond 402 avec son montant
curl -i https://api.sirenic.eu/v1/eu/entreprise/ES/{nif}/marches-publics

# 2. L'appel réglé — le client x402 paie le devis et rejoue la requête
npx x402-fetch https://api.sirenic.eu/v1/eu/entreprise/ES/{nif}/marches-publics

# 3. Ou en MCP, dans Claude Code / Cursor / un agent
claude mcp add --transport http sirenic https://api.sirenic.eu/mcp
```

## What this route does not do

Partial coverage by construction: **20 % of results carry no winner NIF** (consortia without their own NIF, void lots) and Spain has no open register by NIF — a NIF with no row answers 404 without charge, never a sold zero. Never a natural-person winner (DNI, NIE refused), never a contact. Amounts in EUR as published. Source: Ministerio de Hacienda.

## Neighbouring routes

- `/v1/eu/entreprise/ES/{hoja}/actes` — $0.02
- `/v1/eu/entreprise/LV/{regnr}/marches-publics` — $0.02
- `/v1/eu/entreprise/GB/{company_number}/marches-publics` — $0.02

## How you pay

Every route is paid **per call**, in USDC or EURC on the Base network, over the x402 protocol: no account to create, no API key, no subscription. The first call returns a `402` quote your client settles, then replays the call. A failed call is never billed.

Would you rather have a euro invoice and prepaid credits? That is **in preparation**, and we will not announce a date until it is open. Write to [contact@sirenic.eu](mailto:contact@sirenic.eu?subject=Euro%20credit%20packs) and we will let you know when it opens.

Paid responses are **Ed25519-signed**: you can later prove what was served to you, and when. The whole catalogue is free to read in the [OpenAPI document](https://api.sirenic.eu/openapi.json) and in [llms.txt](https://api.sirenic.eu/llms.txt).

**One call, end to end**

```
# Client x402 (npm) — le devis 402 est réglé et l'appel rejoué automatiquement
npx x402-fetch https://api.sirenic.eu/v1/entreprise/552032534

# Ou en MCP, dans Claude Code / Cursor
claude mcp add --transport http sirenic https://api.sirenic.eu/mcp
```

## Routes used and pricing

| Route | Price | Sample | What it returns |
| --- | --- | --- | --- |
| `/v1/eu/entreprise/ES/{nif}/marches-publics` | $0.02 | [free sample](https://api.sirenic.eu/exemples/eu-entreprise-ES-nif-marches-publics.json) | Public-procurement record of a Spanish company from the Plataforma de Contratación del Sector Público (Ministry of Finance CODICE feeds, hosted profiles and aggregated regional platforms, since 2012): contracts WON matched by legal-person NIF — buyer (name, DIR3), subject, CPV, lot, result, award date, amounts in EUR, tenders received, SME flag — and notices ISSUED as a buyer; newest first, capped at 100. Never a natural-person winner. Reuse under the ministry's conditions. |

> ⚠️ Contract end dates are estimates, computed from the notification date and the declared duration. This is not an official re-tendering calendar.

## Take it further

- [See a real response (free)](https://api.sirenic.eu/exemples/eu-entreprise-ES-nif-marches-publics.json)
- [Get the quote for /v1/eu/entreprise/ES/{nif}/marches-publics](https://api.sirenic.eu/v1/eu/entreprise/ES/{nif}/marches-publics)
- [Get notified about euro packs](mailto:contact@sirenic.eu?subject=Euro%20credit%20packs)

## Read next

- [Automating business verification (KYB)](https://api.sirenic.eu/en/use-cases/kyb-automated-business-verification-with-per-block)


Volume figures on this page were measured in our database on 2026-08-19. They are dated snapshots, not live counters.

---

[Home](https://api.sirenic.eu/en) · [Pricing](https://api.sirenic.eu/en/offres) · [Guides](https://api.sirenic.eu/en/articles) · [Routes](https://api.sirenic.eu/en/api) · [Legal notice](https://api.sirenic.eu/mentions-legales) · [Privacy](https://api.sirenic.eu/en/privacy)
