# entreprises.search

Rechercher des entreprises par activité NAF, nom et localisation. Résultats paginés sans coordonnées.

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

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

## Entrée

```json
{
  "additionalProperties": false,
  "properties": {
    "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 (mode liste), UNE granularite. National = omettre (jamais dept:\"all\").",
      "properties": {
        "commune": {
          "description": "Nom de commune, code postal ou code INSEE. Préférer insee pour le code fourni par la carte.",
          "type": "string"
        },
        "dept": {
          "description": "Code departement : 01-95, 2A/2B ou 971-976 (ex. \"69\").",
          "type": "string"
        },
        "insee": {
          "description": "Code INSEE exact; prioritaire sur commune et jamais interprété comme code postal.",
          "type": "string"
        },
        "region": {
          "description": "Nom de region (ex. Auvergne-Rhone-Alpes) — couvre tous ses departements en un appel.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "naf": {
      "description": "Codes NAF (activite) : sous-classes « 4333Z » / « 43.33Z » ou divisions « 43 » (deployees en leurs sous-classes). Filtre la liste ; SANS query, liste les entreprises de l'activite sur la zone, RGE et certifiees d'abord — c'est la recette « les carreleurs du 69 » (les mots ne trouvent pas un metier, le NAF si).",
      "items": {
        "type": "string"
      },
      "type": "array"
    },
    "query": {
      "description": "Recherche plein texte (nom, activite NAF, RGE) pour LISTER des entreprises. UNE requete = UN sujet. Combiner avec localisation pour cibler une zone. Optionnelle si naf est fourni.",
      "type": "string"
    },
    "rge": {
      "description": "Ne retenir que les entreprises actives dont la qualification RGE est valable aujourd'hui. Une localisation est requise sans query ni naf.",
      "type": "boolean"
    },
    "specialite_rge": {
      "description": "Même famille de qualification que la carte RGE; implique rge=true.",
      "enum": [
        "menuiseries",
        "pac",
        "isolation",
        "chauffage",
        "solaire",
        "bois",
        "ventilation",
        "etudes"
      ],
      "type": "string"
    }
  },
  "type": "object"
}
```

## Exemple synthétique

```json
{
  "limit": 20,
  "localisation": {
    "dept": "69"
  },
  "naf": [
    "71.11Z"
  ]
}
```

## 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": {
              "adresse": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "capital_social_eur": {
                "type": [
                  "number",
                  "null"
                ]
              },
              "categorie": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "code_naf": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "code_postal": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "date_creation": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "departement": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "dirigeants": {
                "items": {
                  "type": "object"
                },
                "type": "array"
              },
              "effectif": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "est_rge": {
                "type": "boolean"
              },
              "etat": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "evolution_ca": {
                "items": {
                  "type": "object"
                },
                "type": "array"
              },
              "forme_juridique": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "libelle_naf": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "nom_commercial": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "nombre_certifications_actives": {
                "type": [
                  "number",
                  "null"
                ]
              },
              "raison_sociale": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "raison_sociale_connue": {
                "type": "boolean"
              },
              "rge_date_fin": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "rge_domaines": {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              "siren": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "siret": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "url": {
                "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.
