# marches.search

Rechercher les avis de marchés ; ouvert et avec_dce filtrent des avis et des pièces consultables dans Prescriptio, pas des attributions.

POST `/api/mcp/v1/marches.search` · contrat 1.0.0 · OAuth `mcp:read` · offre payante : false.

Outil MCP : `prescriptio_marches` ; même handler métier.

## Entrée

```json
{
  "additionalProperties": false,
  "properties": {
    "avec_dce": {
      "description": "true = uniquement les marches dont le DOSSIER (DCE) est consultable DANS Prescriptio via prescriptio_dce — pas le lien externe plateforme acheteur. Chaque resultat porte fields.dce_consultable.",
      "type": "boolean"
    },
    "cloture_dans_jours": {
      "description": "Date limite dans les N prochains jours (7 = ferment cette semaine). Combiner avec sort:\"deadline\".",
      "maximum": 3650,
      "minimum": 0,
      "type": "integer"
    },
    "cursor": {
      "description": "Curseur next_cursor de la page precedente, repasse tel quel.",
      "type": "string"
    },
    "limit": {
      "default": 20,
      "maximum": 50,
      "minimum": 1,
      "type": "integer"
    },
    "localisation": {
      "additionalProperties": false,
      "description": "Zone geographique, UNE granularite. National = omettre (jamais dept:\"all\").",
      "properties": {
        "commune": {
          "description": "Nom de la commune de l'ACHETEUR.",
          "type": "string"
        },
        "dept": {
          "description": "Code departement : 01-95, 2A/2B ou 971-978 (ex : \"69\").",
          "type": "string"
        },
        "region": {
          "description": "Nom de region (ex : Auvergne-Rhone-Alpes, PACA) — couvre tous ses departements en un appel.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "publie_depuis_jours": {
      "description": "Publies dans les N derniers jours (1 = veille du jour). Combiner avec sort:\"recent\".",
      "maximum": 3650,
      "minimum": 0,
      "type": "integer"
    },
    "query": {
      "description": "Recherche plein texte (titre, objet, acheteur, CPV). UNE requete = UN sujet : le plein texte exige TOUS les mots. Optionnelle si un filtre date/zone/type est fourni.",
      "type": "string"
    },
    "sort": {
      "description": "deadline = ferme le plus tot d'abord ; recent = publie le plus recemment d'abord ; pertinence (defaut avec query).",
      "enum": [
        "deadline",
        "recent",
        "pertinence"
      ],
      "type": "string"
    },
    "type": {
      "description": "ouvert = encore en consultation (une offre peut etre deposee) ; ferme = cloture ou attribue. Omis = les deux.",
      "enum": [
        "ouvert",
        "ferme"
      ],
      "type": "string"
    }
  },
  "type": "object"
}
```

## Exemple synthétique

```json
{
  "avec_dce": true,
  "limit": 20,
  "localisation": {
    "dept": "69"
  },
  "query": "isolation",
  "sort": "deadline",
  "type": "ouvert"
}
```

## Sortie

```json
{
  "properties": {
    "_meta": {
      "type": "object"
    },
    "next_cursor": {
      "description": "À repasser tel quel pour la page suivante ; null s'il n'y en a plus.",
      "type": [
        "string",
        "null"
      ]
    },
    "results": {
      "description": "Résultats de la page courante.",
      "items": {
        "properties": {
          "fields": {
            "properties": {
              "acheteur": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "codes_cpv": {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              "date_attribution": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "date_limite": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "date_publication": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "dce_consultable": {
                "type": "boolean"
              },
              "dept": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "duree_mois": {
                "type": [
                  "number",
                  "null"
                ]
              },
              "id_boamp": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "jours_avant_cloture": {
                "type": [
                  "number",
                  "null"
                ]
              },
              "montant_attribution": {
                "type": [
                  "number",
                  "null"
                ]
              },
              "montant_estime_max": {
                "type": [
                  "number",
                  "null"
                ]
              },
              "nature": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "statut": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "titulaire": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "type_marche": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "url": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "url_avis": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "ville": {
                "type": [
                  "string",
                  "null"
                ]
              }
            },
            "type": "object"
          },
          "id": {
            "description": "Identifiant à citer (SIREN/SIRET, marche_id, réf DECP).",
            "type": "string"
          },
          "resume": {
            "type": "string"
          },
          "titre": {
            "type": "string"
          }
        },
        "required": [
          "id"
        ],
        "type": "object"
      },
      "type": "array"
    },
    "total_estimated": {
      "description": "Total connu ou estimation signalée par la source ; null si le total est inconnu. Ne jamais extrapoler depuis la taille de la page.",
      "type": [
        "integer",
        "null"
      ]
    }
  },
  "required": [
    "results"
  ],
  "type": "object"
}
```

[Authentification, quotas, pagination et erreurs](/docs/reference/concepts.md). Les propriétés additionnelles des résultats historiques restent autorisées ; ce schéma n'invente pas les champs manquants.
