sirenic

EU public-procurement awards won by a European company

TED publishes above-threshold award notices with the winner's national identifier — in forms that vary from notice to notice (spaces, dots, hyphens, prefixes). This route searches all of them for a company from one of the nine served countries and serves what matters: buyer, subject, notice-level amount, CPV codes, co-winners, official link — published facts, never a score.

See a real response (free) Get the quote for /v1/eu/entreprise/{pays}/{id}/marches-publics-ue

What the route returns

Catalogue description, exactly as agents read it:

European public procurement contract awards won by a company from Latvia, Norway, Belgium, Denmark, Finland, Sweden, Czechia, Slovakia or Estonia, from TED (Tenders Electronic Daily): notices matched by NATIONAL identifier in all its published forms — buyer, country, subject, notice-level amount, CPV codes, co-winners, official link. 40 to 86% of award notices carry a readable winner identifier depending on the country: zero is a non-conclusive absence. Live TED query, cached 24 h.

Expected identifier

Country code (LV, NO, BE, DK, FI, SE, CZ, SK, EE) and national register identifier.

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-17, truncated to one item per array. It is not live data. The full extract is served free of charge from the samples surface, and the schema from the OpenAPI document.

{
 "pays": "LV",
 "id_national": "40003242722",
 "variantes_identifiant": [
  "\"40003242722\""
 ],
 "nombre_avis": 16,
 "nombre_retourne": 16,
 "tronque": false,
 "periode_couverte": "avis eForms (identifiants gagnants publiés depuis le 2023-10-25)",
 "avis": [
  {
   "reference_ted": "547293-2026",
   "date_publication": "2026-08-07",
   "type_avis": "can-standard",
   "objet": "Trīs jaunu automašīnu piegāde Bauskas novada pašvaldības iestādēm",
   "acheteur": {
    "nom": "Bauskas novada pašvaldība",
    "pays": "LVA"
   },
   "montant_avis": {
    "valeur": 24000,
    "devise": "EUR",
    "portee": "avis entier (tous lots/titulaires)"
   },
   "codes_cpv": [
    "34110000"
   ],
   "co_titulaires": [
    "Sabiedrība ar ierobežotu atbildību \"NORDE\""
   ],
   "identifiants_gagnants": [
    "40003242722"
   ],
   "lien_ted": "https://ted.europa.eu/en/notice/547293-2026/pdf",
   "correspondance": {
    "methode": "identifiant",
    "confiance": "haute"
   }
  }
 ],
 "source": "TED — Tenders Electronic Daily (ted.europa.eu), Office des publications de l'UE ; réutilisation libre, © Union européenne",
 "data_freshness": "interrogation TED en direct, cache 24 h"
}

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/{pays}/{id}/marches-publics-ue

# 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/{pays}/{id}/marches-publics-ue

# 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: 40 to 86% of award notices carry a readable winner identifier depending on the country (measured on 2026-09-17); zero never means “never won a contract”. Poland and Spain excluded (TED publishes the NIP and the NIF there, not our profiles' identifiers).

Neighbouring routes

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 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 and in 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

RoutePriceSampleWhat it returns
/v1/eu/entreprise/{pays}/{id}/marches-publics-ue$0.02free sampleEuropean public procurement contract awards won by a company from Latvia, Norway, Belgium, Denmark, Finland, Sweden, Czechia, Slovakia or Estonia, from TED (Tenders Electronic Daily): notices matched by NATIONAL identifier in all its published forms — buyer, country, subject, notice-level amount, CPV codes, co-winners, official link. 40 to 86% of award notices carry a readable winner identifier depending on the country: zero is a non-conclusive absence. Live TED query, cached 24 h.

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

No account to create, no key to request: the first step is free and shows you exactly what you would be buying.

See a real response (free) Get the quote for /v1/eu/entreprise/{pays}/{id}/marches-publics-ue Get notified about euro packs

Read next

Volume figures on this page were measured in our database on 2026-08-19. They are dated snapshots, not live counters. · OpenAPI · llms.txt · Full route catalogue and pricing