Raw schema
{
"type": "object",
"properties": {
"cpv": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Code CPV exact à 8 chiffres, ex. '72000000' pour les services informatiques. Environ 40 % des avis BOAMP n'ont aucun CPV : un filtre CPV seul les écarte.",
"title": "Cpv"
},
"cpv_family": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Préfixe CPV à 2 chiffres, ex. '72' = toute l'informatique, '45' = travaux.",
"title": "Cpv Family"
},
"descripteur": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Code descripteur BOAMP (nomenclature DILA), alternative au CPV côté français.",
"title": "Descripteur"
},
"keyword": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Recherche plein texte sur titre et description, insensible aux accents. TOUS les mots doivent figurer dans le même avis : préférez un seul mot puis affinez. L'opérateur OR de FTS5 est accepté, ex. 'BIM OR \"maquette numerique\"'.",
"title": "Keyword"
},
"region": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Région française en slug, ex. 'bretagne', 'ile-de-france', 'occitanie'. Une valeur inconnue rend une erreur qui suggère le slug le plus proche.",
"title": "Region"
},
"department": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Code de département, ex. '35', '2A', '974'. Plusieurs valeurs séparées par des virgules.",
"title": "Department"
},
"country": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Code pays ISO à 2 lettres, ex. 'FR', 'DE', 'ES'. Utile pour ne garder que le français ('FR') ou cibler un pays sur le corpus TED.",
"title": "Country"
},
"source": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "'boamp' (avis français) ou 'ted' (avis européens). Sans valeur, les deux.",
"title": "Source"
},
"include_planning": {
"default": false,
"description": "Inclure les avis de pré-information (marchés simplement envisagés, non encore ouverts). Exclus par défaut.",
"title": "Include Planning",
"type": "boolean"
},
"status": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "'open' (date limite non dépassée, évaluée à l'instant de la requête) ou 'closed'. ⚠️ SANS ce filtre la recherche porte sur tout le stock depuis 2015, avis clos compris (~2,9 millions) : posez 'open' si vous cherchez des avis auxquels il est encore possible de répondre.",
"title": "Status"
},
"procedure_type": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Type de procédure, ex. 'open', 'restricted', 'negotiated'. Valeur inconnue = erreur listant les valeurs acceptées.",
"title": "Procedure Type"
},
"contract_type": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "'services', 'works' ou 'supplies'. Les formes françaises 'travaux' et 'fournitures' sont acceptées comme alias.",
"title": "Contract Type"
},
"buyer_siret": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "SIRET de l'acheteur, 14 chiffres exactement (l'établissement, pas l'entreprise).",
"title": "Buyer Siret"
},
"buyer_keyword": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Fragment du nom de l'acheteur, 3 caractères minimum, ex. 'metropole', 'CHU'.",
"title": "Buyer Keyword"
},
"budget_min": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Montant minimum en euros. Les avis sans budget renseigné sont écartés, sauf include_null_budget=true.",
"title": "Budget Min"
},
"budget_max": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Montant maximum en euros.",
"title": "Budget Max"
},
"include_null_budget": {
"default": false,
"description": "Garder les avis dont le budget n'est pas renseigné malgré un filtre de montant. Beaucoup d'avis BOAMP n'annoncent aucun montant.",
"title": "Include Null Budget",
"type": "boolean"
},
"deadline_after": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Date limite de remise postérieure à cette date ISO (AAAA-MM-JJ).",
"title": "Deadline After"
},
"deadline_before": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Date limite de remise antérieure à cette date ISO (AAAA-MM-JJ).",
"title": "Deadline Before"
},
"include_null_deadline": {
"default": false,
"description": "Garder les avis sans date limite malgré un filtre de date limite. Sans cela, un filtre deadline_* les écarte silencieusement.",
"title": "Include Null Deadline",
"type": "boolean"
},
"published_after": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Publié après cette date ISO (AAAA-MM-JJ). C'est le filtre d'une veille quotidienne.",
"title": "Published After"
},
"published_before": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Publié avant cette date ISO (AAAA-MM-JJ).",
"title": "Published Before"
},
"sort": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "'date' (antéchronologique, défaut) ou 'relevance' (classement BM25). 'relevance' n'a de sens qu'avec un keyword et est refusé sans lui.",
"title": "Sort"
},
"page": {
"default": 1,
"description": "Numéro de page, à partir de 1.",
"title": "Page",
"type": "integer"
},
"page_size": {
"default": 10,
"description": "Nombre d'avis par page, 10 par défaut, plafonné à 20 en anonyme. Un avis pèse environ 1 300 caractères : montez à 20 seulement si vous comptez les lire tous.",
"title": "Page Size",
"type": "integer"
}
},
"title": "search_tendersArguments"
}