> ## Documentation Index
> Fetch the complete documentation index at: https://doc.fluximmo.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Géocodage direct en masse (CSV)

> Géocodage direct par fichier CSV (mode synchrone, service public BAN/BANO).

## À quoi ça sert

`POST /search/csv` traite un **fichier CSV** d'adresses en une seule requête multipart et retourne le CSV enrichi avec les colonnes géocodées (`latitude`, `longitude`, `result_label`, `result_score`, `result_citycode`, etc.). Mode **synchrone** : la réponse contient le CSV résultat ; à utiliser pour des batchs courts.

**Transparence** : appuyé sur la **Base Adresse Nationale (BAN/BANO)** publique (`api-adresse.data.gouv.fr`) opérée par Fluximmo. Pour les fichiers volumineux ou les traitements asynchrones, voir la section [Batch async](/api-geocoding-reference/batch-async/créer-un-nouveau-projet).

**Limites pratiques** :

* Taille recommandée : quelques milliers de lignes en mode synchrone. Au-delà, basculez vers le pipeline batch async.
* Format CSV attendu : encodage UTF-8, séparateur configurable (`;` par défaut), une ou plusieurs colonnes adresse à concaténer via le paramètre `columns`.
* Latence : proportionnelle au nombre de lignes ; prévoir un timeout HTTP généreux côté client.

## Exemple

### Géocoder un mini-CSV

<CodeGroup>
  ```bash curl theme={null}
  # adresses.csv contient :
  # id;adresse;ville
  # 1;1 rue de Rivoli;Paris
  # 2;Place Bellecour;Lyon

  curl -X POST https://geo.fluximmo.io/search/csv \
    -F "data=@adresses.csv" \
    -F "columns=adresse" \
    -F "columns=ville"
  ```

  ```python Python theme={null}
  import requests

  with open("adresses.csv", "rb") as fh:
      resp = requests.post(
          "https://geo.fluximmo.io/search/csv",
          files={"data": fh},
          data=[("columns", "adresse"), ("columns", "ville")],
          timeout=120,
      )
  print(resp.text[:500])
  ```

  ```javascript Node theme={null}
  import fs from "node:fs";
  const form = new FormData();
  form.append("data", new Blob([fs.readFileSync("adresses.csv")]), "adresses.csv");
  form.append("columns", "adresse");
  form.append("columns", "ville");

  const resp = await fetch("https://geo.fluximmo.io/search/csv", {
    method: "POST",
    body: form,
  });
  console.log((await resp.text()).slice(0, 500));
  ```
</CodeGroup>

## Liens utiles

* [Géocodage direct unitaire](/api-geocoding-reference/search/recherche-par-géocodage-direct)
* [Pipeline batch asynchrone (gros volumes)](/api-geocoding-reference/batch-async/créer-un-nouveau-projet)

<Card title="Clé test gratuite — 1 semaine" icon="key" href="https://my.fluximmo.io">
  Créez un compte sur **my.fluximmo.io** pour récupérer une clé API test gratuite (1 semaine, accès limité). Aucun paiement requis.
</Card>


## OpenAPI

````yaml post /search/csv
openapi: 3.1.1
info:
  title: Service de géocodage
  description: API du service de géocodage 2.0 de l'IGN.
  contact:
    email: contact.geoservices@ign.fr
  version: 2.0.0
  license:
    name: Licence ouverte 2.0
    url: https://www.etalab.gouv.fr/licence-ouverte-open-licence
servers:
  - url: https://geo.fluximmo.io
security: []
tags:
  - name: getCapabilities
    description: Découverte du service
  - name: search
    description: Géocodage direct (recherche)
  - name: reverse
    description: Géocodage inverse
  - name: batch
    description: Géocodage par lot synchrone
  - name: batch-async
    description: Géocodage par lot asynchrone
paths:
  /search/csv:
    post:
      tags:
        - search
        - batch
      summary: Géocodage direct en masse d’un fichier CSV
      description: >
        Géocodage direct en masse d’un fichier CSV. Les paramètres de la requête
        permettent de spécifier les colonnes à utiliser pour le géocodage, les
        index à utiliser, les filtres à appliquer et les colonnes à conserver
        dans le fichier CSV de sortie.


        Le fichier soumis doit faire une taille maximale de 50 Mo.
      operationId: searchCsv
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              type: object
              required:
                - data
              properties:
                data:
                  type: string
                  format: binary
                  description: Fichier CSV contenant les lignes à géocoder
                columns:
                  type: array
                  items:
                    type: string
                  description: >
                    Liste des colonnes du fichier CSV à utiliser pour le
                    géocodage. Celles-ci seront concaténées pour former le
                    critère de recherche texte.


                    Si le paramètre n'est pas fourni toutes les colonnes seront
                    concaténées, ce qui est rarement souhaitable.
                indexes:
                  type: array
                  items:
                    type: string
                  description: >-
                    Liste des index à utiliser pour le géocodage (parmi address,
                    poi, parcel)
                type:
                  type: string
                  description: >-
                    Colonne contenant le type d’objet accepté pour le géocodage
                    de la ligne (address)
                citycode:
                  type: string
                  description: >-
                    Colonne contenant le code INSEE de la commune à utiliser
                    comme filtre (address, poi)
                postcode:
                  type: string
                  description: >-
                    Colonne contenant le code postal à utiliser comme filtre
                    (address, poi)
                category:
                  type: string
                  description: >-
                    Colonne contenant la catégorie de POI à utiliser comme
                    filtre (poi)
                lon:
                  type: string
                  description: Colonne contenant la longitude du point de recherche
                lat:
                  type: string
                  description: Colonne contenant la latitude du point de recherche
                departmentcode:
                  type: string
                  description: >-
                    Colonne contenant le code département à utiliser comme
                    filtre (parcel)
                municipalitycode:
                  type: string
                  description: >-
                    Colonne contenant le code commune  à utiliser comme filtre
                    (parcel)
                oldmunicipalitycode:
                  type: string
                  description: >-
                    Colonne contenant l'ancien code commune à utiliser comme
                    filtre (parcel)
                districtcode:
                  type: string
                  description: >-
                    Colonne contenant le code d'arrondissement à utiliser comme
                    filtre (parcel)
                section:
                  type: string
                  description: >-
                    Colonne contenant le numéro de section à utiliser comme
                    filtre (parcel)
                sheet:
                  type: string
                  description: >-
                    Colonne contenant le numéro de feuille à utiliser comme
                    filtre (parcel)
                number:
                  type: string
                  description: >-
                    Colonne contenant le numéro de parcelle à utiliser comme
                    filtre (parcel)
                result_columns:
                  type: array
                  items:
                    type: string
                  description: >
                    Liste des colonnes de type résultat à conserver dans le
                    fichier CSV de sortie.


                    Par défaut toutes les colonnes disponibles sont retournées.
            encoding:
              columns:
                style: form
                explode: true
              result_columns:
                style: form
                explode: true
              indexes:
                style: form
                explode: true
      responses:
        '200':
          description: Géocodage réussi
          content:
            text/csv:
              schema:
                $ref: '#/components/schemas/GeocodeCsvResponse'
        '400':
          description: >-
            Échec du géocodage suite à une erreur dans la requête ou dans le
            fichier CSV
          content:
            application/json:
              schema:
                type: object
                properties:
                  code:
                    type: number
                    example: 400
                    description: Code d'erreur (HTTP)
                  message:
                    type: string
                    description: Message d'erreur
                    example: Impossible de lire le fichier CSV
components:
  schemas:
    GeocodeCsvResponse:
      type: string
      format: binary
      description: >
        Fichier CSV géocodé. Les lignes d'origine sont préservées.


        Les colonnes issues de l'objet associé lors du géocodage et pouvant être
        ajoutées sont :

        - result_label

        - result_score

        - result_type (address)

        - result_id

        - result_housenumber (address)

        - result_name (address)

        - result_street (address)

        - result_postcode (address, poi)

        - result_city (address, poi)

        - result_context

        - result_citycode (address, poi)

        - result_oldcitycode (address, poi)

        - result_oldcity (address, poi)

        - result_district (address, poi)

        - result_category (poi)

        - result_departmentcode (parcel)

        - result_municipalitycode (parcel)

        - result_section (parcel)

        - result_sheet (parcel)

        - result_number (parcel)

        - result_oldmunicipalitycode (parcel)

        - result_districtcode (parcel)


        Les colonnes suivantes sont spécifiques au géocodage direct :

        - latitude

        - longitude


        Les colonnes suivantes sont spécifiques au géocodage inversé :

        - result_latitude

        - result_longitude

        - result_distance


        Les colonnes suivantes sont liées au géocodage en masse :

        - result_score_next : score du résultat suivant le cas échéant

        - result_index : index dans lequel l'objet a été trouvé

        - result_status (ok = trouvé, not-found = non trouvé, skipped = ligne
        ignorée en raison de paramètres manquants ou invalides, error = erreur
        du serveur lors de la recherche)


        NB : En cas de colonnes d'origine nommées latitude ou longitude et de
        géocodage direct, elles seront écrasées par les valeurs calculées.

````