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é. Les colonnes BOAMP (FR) et TED FR sont mesurées sur le périmètre français (là où les identifiants comme le SIRET et le département s'appliquent) ; la colonne TED UE étend la mesure à l'ensemble des pays pris en charge (voir note 2). Ils dépendent essentiellement du format imposé par la source à l'autorité contractante au moment de la publication.
| Champ | BOAMP (FR) | TED FR legacy | TED FR eForms | TED UE2 eForms |
|---|---|---|---|---|
title | 100% | 100% | 100% | 100% |
buyer_name | 100% | 100% | 100% | 100% |
cpv_codes | 62% | 100% | 100% | 100% |
buyer_siret | 77% | 79% | 95% | n/a1 |
deadline | 86% | 99% | 97% | 94% |
budget_max | 0% | 38% | 6% | 2% |
department (FR) | 100% | 90% | 100% | n/a1 |
| Champ | BOAMP (FR) | TED FR legacy | TED FR eForms | TED UE2 eForms |
|---|---|---|---|---|
winner_name | 91% | 88% | 98% | 96% |
winner_siret | 74% | 69% | 92% | n/a1 |
amount | 78% | 84% | 95% | 83% |
awarded_at | 95% | 100% | 100% | 100% |
1 Le SIRET et le département sont des identifiants français : ils ne s'appliquent pas aux entités non-françaises (seuls ~25-41 % des attributaires ou acheteurs sur le périmètre TED UE sont des entités françaises dotées d'un SIRET).
2 UE désigne les pays pris en charge : FR, DE, ES, IT, UK.
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 / winner_siret en TED legacy : le format XML legacy (jusqu'à fin 2023) publié par TED n'exige pas l'identifiant SIRET français, qui était donc quasi absent à la source. Nous le reconstituons par résolution du nom de l'entité vers le référentiel SIRENE (API officielle), ce qui porte la couverture à ~69-79% sur le périmètre français. Le format eForms inclut nativement le SIRET (~92-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 : en TED legacy le département est déduit du code NUTS3 de la notice (~90%). En eForms, qui n'expose pas de NUTS, il est déduit du code postal de l'acheteur, présent sur la quasi-totalité des avis, ce qui donne une couverture proche de 100%. Le mapping buyer_siret vers commune INSEE vers département via SIRENE reste un complément.
Ces taux reflètent surtout ce que les sources officielles publient. Pour certains champs comme le SIRET, nous enrichissons au-delà de la source via le référentiel SIRENE. Pour les lignes où un champ reste null, c'est qu'il était absent ou non parsable dans la donnée source, et non reconstituable de façon fiable.
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.
Au lieu d'interroger l'API en continu, vous pouvez enregistrer un profil de veille (un jeu de critères) et recevoir automatiquement les nouveaux avis qui y correspondent. Disponible à partir du tier Starter, via le tableau de bord ou l'endpoint POST /profiles.
Mots-clés, secteurs (familles CPV) ou codes CPV précis, départements, régions, fourchette de budget, ou un SIRET d'acheteur. Au moins un critère est requis. Le bouton « Tester ce profil » du tableau de bord indique combien d'avis correspondent actuellement.
L'envoi est quotidien (vers 07:00 UTC) et ne contient que les nouveaux avis ingérés depuis la veille ; il n'y a pas de rattrapage d'historique à la création d'un profil. Pour éviter les envois massifs, chaque digest est plafonné (50 avis par email, 20 par carte Teams) avec un compteur des correspondances supplémentaires : affinez votre profil pour des alertes plus ciblées.
Chaque email d'alerte inclut un lien de désinscription (ainsi que le bouton natif « Se désinscrire » de votre messagerie). Vous pouvez aussi mettre en pause (désactiver) ou supprimer un profil à tout moment depuis le tableau de bord.