Ce que contient l'API, comment les champs sont structurés, ce sur quoi vous pouvez compter, et à quelle fréquence les données arrivent.
TenderAPI agrège deux sources officielles de marchés publics :
FR, DE, IT, ES, UK.FR, DE, IT, ES, UK, rafraîchi quotidiennement.2,9 M+ tenders (avis publiés) et 1,95 M+ awards (résultats d'attribution) à date.
Les avis de préinformation TED annoncent un marché à venir : on ne peut pas encore y soumissionner et ils n'ont pas de date limite. Ils sont donc exclus de /tenders par défaut. Pour les inclure (veille amont des marchés à venir), ajoutez include_planning=true.
L'API expose deux ressources principales :
tenders : les avis publiés (appels d'offres ouverts ou clôturés).awards : les résultats d'attribution (qui a gagné, pour combien, quand).country suit la norme ISO 3166-1 alpha-2 (FR, DE, IT, ES, UK…).2026-05-21T08:00:00Z).cpv_codes et cpv_family sont des tableaux JSON de codes CPV (Common Procurement Vocabulary).descripteur_libelles_folded est une version normalisée (minuscules, sans accents) pour la recherche FTS (Full-Text Search).keyword= est le paramètre canonique (FTS5 multi-tokens AND, accent-insensible). Les alias q= et search= sont acceptés pour convention REST. Pour une recherche OR explicite : keyword=BIM OR "maquette numerique". Listes virgule/pipe non parsées comme OR : utilisez le mot-clé OR.GB est aliasé vers UK (convention TED legacy).Le filtre keyword (alias q) recherche dans le titre et la description, dans la langue de publication de l'avis (TED est multilingue). Un terme en français ne remonte pas les avis allemands, espagnols ou italiens : cherchez le concept dans chaque langue cible et combinez avec OR, par exemple keyword=bathymétrie OR Bathymetrie OR batimetría.
awarded_at_sourcePour chaque award, ce champ indique d'où vient la date d'attribution. C'est utile pour interpréter la précision de awarded_at :
eForms : date exacte de décision (notices TED au format eForms, depuis fin 2023).ted_legacy_decision : date de conclusion du contrat extraite du XML legacy.ted_legacy_publication : utilisé en repli quand la date de décision est absente ou aberrante côté source : on prend alors la date de publication de la notice.boamp_pub_legacy et variantes : dates issues de la chaîne BOAMP.Les taux ci-dessous indiquent la proportion de lignes où le champ est renseigné, mesurée sur la totalité du corpus actuel. Ils dépendent essentiellement du format imposé par la source à l'autorité contractante au moment de la publication.
| Champ | BOAMP | TED legacy | TED eForms |
|---|---|---|---|
title | 100% | 100% | 100% |
buyer_name | 100% | 100% | 100% |
cpv_codes | 62% | 100% | 100% |
buyer_siret | 77% | 16% | 95% |
deadline | 86% | 95% | 97% |
budget_max | 0% | 38% | 6% |
department (FR) | 100% | 91% | 95% |
| Champ | BOAMP | TED legacy | TED eForms |
|---|---|---|---|
winner_name | 91% | 85% | 100% |
winner_siret | 74% | 14% | 94% |
amount | 78% | 78% | 96% |
awarded_at | 95% | 100% | 100% |
budget_max = 0% sur BOAMP : le format BOAMP n'expose pas de champ budget structuré. Le montant n'est connu qu'à l'attribution (champ amount dans /awards).buyer_siret et winner_siret faibles en TED legacy (~14-16%) : le format XML legacy (jusqu'à fin 2023) publié par TED n'exige pas l'identifiant SIRET français. Ce champ devient quasi systématique avec le format eForms (~95%).cpv_codes = 62% sur BOAMP : une partie des avis BOAMP anciens publient des descripteurs textuels sans code CPV machine-lisible. Pour ces lignes, descripteur_libelles reste exploitable via la recherche FTS.budget_max faible sur eForms (6%) : le format eForms rend le champ optionnel et la majorité des autorités contractantes ne le renseignent pas. Le montant final reste disponible côté /awards.department sur TED : la déduction du département français s'appuie d'abord sur le code NUTS3 fourni par la notice, complétée par un mapping buyer_siret → INSEE commune → département (via SIRENE). Le résidu (~5-9%) correspond aux avis sans NUTS3 ni SIRET acheteur exploitable.
Ces taux reflètent ce que les sources officielles publient effectivement, et constituent une limite intrinsèque à ces sources, pas de notre traitement. Pour les lignes où un champ est null, c'est qu'il était absent ou non parsable dans la donnée source.
L'ingestion des nouvelles publications est entièrement automatisée :
La latence typique entre la publication officielle d'un avis et sa disponibilité dans l'API est inférieure à 24 heures.
Chaque jour, les tenders dont la date limite de remise des offres est dépassée basculent automatiquement de status="open" à status="closed". Certains avis n'ont pas de date limite renseignée (accords-cadres permanents, procédures négociées, anciens MAPA) et restent en open par défaut. Pour les exclure, ajoutez deadline_after=now. À l'inverse, un filtre deadline_after/deadline_before écarte par défaut les avis sans date limite : ajoutez include_null_deadline=true pour les conserver dans vos résultats.