BYTETOOLS

API Adresse (BAN)

Free official French address API with no key: geocode and validate any French address, reverse geocode coordinates, and bulk-geocode a CSV. Tested example included.

No API key requiredCORS enabledHTTPSFree tier

Endpoint tested and returned HTTP 200 on 2026-08-21

What is the API Adresse (BAN)?

API Adresse is the French government's free, key-free geocoding service, built on the Base Adresse Nationale. It converts French addresses to coordinates, validates and normalises them, reverse-geocodes a latitude and longitude, and can bulk-geocode an uploaded CSV file.

This is the authoritative source for French addresses, maintained by the state as part of the Base Adresse Nationale, so it is not a commercial geocoder's best guess — it is the reference the administration itself uses. For anything involving French postal addresses, that authority matters: INSEE municipality codes, official street names and canonical postcodes all come back correct.

Responses are GeoJSON, which drops straight into Leaflet, Mapbox or any mapping library with no transformation. The `score` field on each result is worth building logic around: it runs from 0 to 1, and a low score on the top hit is a strong signal that the input was malformed or the address does not exist, which makes it a practical validity check rather than just a ranking.

Quick facts

Base URL
https://api-adresse.data.gouv.fr
Authentication
No API key or account. It is French open government data, free for any use including commercial.
Rate limit
50 requests per second per IP for the search endpoint. Larger jobs should use the CSV bulk endpoint instead of looping.
Pricing
Free. Open licence (Licence Ouverte / Etalab).
CORS
Enabled — callable directly from browser JavaScript
Official docs
Read the docs

How to use the API Adresse (BAN)

Every request below was executed against the live API on 2026-08-21, and the response shown is the real body it returned — not an illustration.

1. Geocode a French street address

GET https://api-adresse.data.gouv.fr/search/?q=8+bd+du+port&limit=1

curl
curl 'https://api-adresse.data.gouv.fr/search/?q=8+bd+du+port&limit=1'
JavaScript (fetch)
const res = await fetch("https://api-adresse.data.gouv.fr/search/?q=8+bd+du+port&limit=1");
if (!res.ok) throw new Error(`Request failed: ${res.status}`);
const data = await res.json();
console.log(data);
Python (requests)
import requests

res = requests.get("https://api-adresse.data.gouv.fr/search/?q=8+bd+du+port&limit=1", timeout=20)
res.raise_for_status()
print(res.json())
Response — HTTP 200
{
  "type": "FeatureCollection",
  "features": [
    {
      "type": "Feature",
      "geometry": {
        "type": "Point",
        "coordinates": [
          2.062821,
          49.031624
        ]
      },
      "properties": {
        "label": "8 Boulevard du Port 95000 Cergy",
        "score": 0.4924265550239234,
        "housenumber": "8",
        "id": "95127_1448_00008",
        "banId": "8e6b04d7-f6fd-48a1-80be-4ec984a286e8",
        "name": "8 Boulevard du Port",
        "postcode": "95000",
        "citycode": "95127",
        "x": 631468.28,
        "y": 6881710.34,
        "city": "Cergy",
        "context": "95, Val-d'Oise, Île-de-France",
        "type": "housenumber",
        "importance": 0.67985,
        "depcode": "95",
        "street": "Boulevard du Port",
        "_type": "address"
      }
    }
  ],
  "query": "8 bd du port"
}

Parameters

ParameterTypeRequiredDescription
qqueryRequiredThe address to geocode, as free text. Handles partial and misspelled input reasonably well. 8 bd du port
limitqueryOptionalHow many results to return. Defaults to 5. 1
typequeryOptionalRestrict result granularity: `housenumber`, `street`, `locality` or `municipality`. housenumber
postcode / citycodequeryOptionalNarrow to a postcode or an INSEE municipality code, which sharply improves precision. 95000
lat / lonqueryOptionalOn the `/reverse` endpoint, the coordinates to resolve to an address. 48.8566
(CSV bulk)form fieldOptionalThe `/search/csv/` endpoint accepts an uploaded CSV and geocodes every row in one job.

Response fields

typestring
Always `FeatureCollection` — the response is standard GeoJSON.
features[].geometry.coordinatesarray
Position as `[longitude, latitude]`. GeoJSON order is longitude first, which is the reverse of how most people say it.
properties.labelstring
The full normalised address, ready to display or store.
properties.scorefloat
Match confidence from 0 to 1. A low score on the best result means the input was probably wrong — use it as a validation signal.
properties.citycodestring
INSEE municipality code, the official French administrative identifier for the commune.
properties.postcode / citystring
Canonical postcode and city name.
properties.housenumber / streetstring
Parsed components of the address.
properties.typestring
Granularity actually matched — `housenumber` is precise, `municipality` means only the town was resolved.

What you can build with the API Adresse (BAN)

  • Validate and normalise French addresses at checkout or signup
  • Geocode a customer database for mapping and territory analysis
  • Add address autocomplete to a French web form
  • Reverse-geocode GPS coordinates to a street address for delivery tracking

Common errors and how to fix them

400

Missing `q`, or a query shorter than three characters.

Fix: The search endpoint needs a minimum query length. For reverse geocoding, `lat` and `lon` are both required.

Low score on the top result

The address is malformed or does not exist.

Fix: Do not silently accept the best match. Set a threshold — around 0.5 is a reasonable starting point — and ask the user to confirm below it.

Coordinates look swapped

Not an error — GeoJSON is `[longitude, latitude]`.

Fix: Most mapping libraries expect that order; most humans say it the other way. Check which your code assumes.

API Adresse (BAN) — frequently asked questions

Is the French address API free?

Yes, completely free with no API key or registration. It is French open government data under the Licence Ouverte, so commercial use is permitted.

What is the score field for?

It is match confidence from 0 to 1, and it doubles as a validation signal. A low score on the best result usually means the input address was malformed or does not exist, so setting a threshold is more reliable than accepting the top hit blindly.

Can I geocode many addresses at once?

Yes. The CSV endpoint accepts an uploaded file and geocodes every row in a single job, which is the intended route for bulk work rather than looping over the search endpoint at 50 requests per second.

Does it work for addresses outside France?

No. It covers France and its overseas territories only, since it is built on the Base Adresse Nationale. For international geocoding use Nominatim or Photon, both also documented in this directory.

Tools that pair with this API

API Adresse (BAN) is an independent third-party service and is not affiliated with ByteTools or ByteVancer. Details on this page were verified on 2026-08-21; always check the official documentation before relying on this API in production, as terms and limits can change.