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), 'relevance' (classement BM25) ou 'deadline' (date limite la plus proche d'abord, avis sans date limite en dernier). 'relevance' n'a de sens qu'avec un keyword et est refusé sans lui. 'deadline' se combine avec status='open' ou deadline_after, sinon la liste commence par des avis clos depuis des années.",
"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"
}