Open Data — entry 011 of 44
French Address Search
geo.api.gouv.fr's address search now redirects to the Géoplateforme's geocoding API at data.geopf.fr/geocodage, which geocodes and reverse-geocodes French addresses down to the housing-unit level from the country's authoritative address registry. Responses come back as GeoJSON FeatureCollections scored by match confidence, and the service is free and keyless for reasonable use.
The Base Adresse Nationale (BAN) geocoder — France's authoritative government address registry — turns free-text French addresses into ranked, scored GeoJSON matches down to the individual housenumber, and reverse-geocodes coordinates back to the nearest address. It's free and keyless, but it is rate-limited and fussier about its q/limit parameters than the other three entries in this quartet.
GreatAPIs Score
Auth quickstart
- No API key or account is required — search and reverse-geocoding are both public and keyless.
- CORS is open on every response: a probe in this run confirmed
access-control-allow-origin: *both on a bare request and on one carrying anOrigin: https://example.comheader. - The provider's own docs publish a per-IP rate limit of 50 requests/second ("50 appels/IP/seconde"), so cache results and back off on a 429 rather than retrying immediately.
Your key is stored only in this browser (localStorage) and sent directly to the API — never to greatapis.
Endpoints
getCapabilities1
Découverte du service
GET/getCapabilitiesDécouvrir le service
| Status | Description | Schema |
|---|---|---|
200 | successful operation | Getcapabilities |
404 | Not found | — |
search2
Géocodage direct (recherche)
GET/searchRecherche par géocodage direct
| Name | In | Required | Type |
|---|---|---|---|
q | query | no | string |
autocomplete | query | no | string |
index | query | no | — |
limit | query | no | integer |
lat | query | no | number |
lon | query | no | number |
returntruegeometry | query | no | boolean |
postcode | query | no | — |
citycode | query | no | — |
depcode | query | no | — |
type | query | no | string |
city | query | no | string |
category | query | no | — |
departmentcode | query | no | string |
municipalitycode | query | no | string |
oldmunicipalitycode | query | no | string |
districtcode | query | no | string |
section | query | no | string |
number | query | no | string |
sheet | query | no | string |
| Status | Description | Schema |
|---|---|---|
200 | successful operation | — |
400 | Parse query failed | — |
POST/search/csvGéocodage direct en masse d’un fichier CSV
multipart/form-data (required)
| Status | Description | Schema |
|---|---|---|
200 | Géocodage réussi | GeocodeCsvResponse |
400 | Échec du géocodage suite à une erreur dans la requête ou dans le fichier CSV | — |
reverse2
Géocodage inverse
GET/reverseRecherche par géocodage inverse
| Name | In | Required | Type |
|---|---|---|---|
searchgeom | query | no | string |
lon | query | no | number |
lat | query | no | number |
index | query | no | — |
limit | query | no | integer |
returntruegeometry | query | no | boolean |
postcode | query | no | — |
citycode | query | no | — |
type | query | no | string |
city | query | no | string |
category | query | no | — |
departmentcode | query | no | string |
municipalitycode | query | no | string |
oldmunicipalitycode | query | no | string |
districtcode | query | no | string |
section | query | no | string |
number | query | no | string |
sheet | query | no | string |
| Status | Description | Schema |
|---|---|---|
200 | successful operation | — |
400 | Parse query failed | — |
POST/reverse/csvGéocodage inversé en masse d’un fichier CSV
multipart/form-data (required)
| Status | Description | Schema |
|---|---|---|
200 | Géocodage réussi | GeocodeCsvResponse |
400 | Échec du géocodage suite à une erreur dans la requête ou dans le fichier CSV | — |
batch-async10
Géocodage par lot asynchrone
POST/async/projectsCréer un nouveau projet
| Name | In | Required | Type |
|---|---|---|---|
X-Community | header | no | string |
| Status | Description | Schema |
|---|---|---|
201 | Projet créé avec succès | Project |
401 | Authentification incorrecte | — |
403 | Droits insuffisants | — |
GET/async/projects/{projectId}Récupérer les informations
| Name | In | Required | Type |
|---|---|---|---|
projectId | path | yes | string |
| Status | Description | Schema |
|---|---|---|
200 | Métadonnées du projet | Project |
401 | Non autorisé | — |
404 | Projet introuvable | — |
DELETE/async/projects/{projectId}Supprimer un projet
| Name | In | Required | Type |
|---|---|---|---|
projectId | path | yes | string |
| Status | Description | Schema |
|---|---|---|
204 | Projet supprimé avec succès | — |
401 | Non autorisé | — |
403 | Action interdite (le projet est en cours de traitement) | — |
404 | Projet introuvable | — |
POST/async/projects/{projectId}/abortAnnuler un géocodage en attente ou en cours
| Name | In | Required | Type |
|---|---|---|---|
projectId | path | yes | string |
| Status | Description | Schema |
|---|---|---|
200 | Annulation prise en compte | Project |
401 | Non autorisé | — |
403 | Action interdite (le projet n'est pas en cours ou en attente) | — |
404 | Projet introuvable | — |
PUT/async/projects/{projectId}/input-fileUploader un fichier d'entrée pour un projet
| Name | In | Required | Type |
|---|---|---|---|
projectId | path | yes | string |
Content-Length | header | no | integer |
Content-Disposition | header | no | string |
application/octet-stream
| Status | Description | Schema |
|---|---|---|
200 | Fichier d'entrée uploadé avec succès | Project |
400 | Fichier invalide (taille excessive ou incorrecte) | — |
401 | Non autorisé | — |
403 | Action interdite (le projet est en cours de traitement ou terminé) | — |
404 | Projet introuvable | — |
GET/async/projects/{projectId}/input-file/{token}Télécharger le fichier source du projet
| Name | In | Required | Type |
|---|---|---|---|
projectId | path | yes | string |
token | path | yes | string |
| Status | Description | Schema |
|---|---|---|
200 | Fichier téléchargé avec succès | GeocodeCsvResponse |
GET/async/projects/{projectId}/output-file/{token}Télécharger le fichier résultat du projet
| Name | In | Required | Type |
|---|---|---|---|
projectId | path | yes | string |
token | path | yes | string |
| Status | Description | Schema |
|---|---|---|
200 | Fichier téléchargé avec succès | — |
PUT/async/projects/{projectId}/pipelineDéfinir les paramètres du traitement
| Name | In | Required | Type |
|---|---|---|---|
projectId | path | yes | string |
application/json — Pipeline
| Status | Description | Schema |
|---|---|---|
200 | Pipeline défini avec succès | Project |
400 | Paramètres invalides | — |
401 | Non autorisé | — |
403 | Action interdite (le projet est en cours de traitement ou terminé) | — |
404 | Projet introuvable | — |
POST/async/projects/{projectId}/resetRé-initialise un géocodage terminé ou en erreur
| Name | In | Required | Type |
|---|---|---|---|
projectId | path | yes | string |
| Status | Description | Schema |
|---|---|---|
200 | Ré-initialisation prise en compte | Project |
401 | Non autorisé | — |
403 | Action interdite (le projet n'est pas terminé ou en erreur) | — |
404 | Projet introuvable | — |
POST/async/projects/{projectId}/startDémander le démarrage du géocodage
| Name | In | Required | Type |
|---|---|---|---|
projectId | path | yes | string |
| Status | Description | Schema |
|---|---|---|
200 | Projet mis en attente de géocodage | Project |
401 | Non autorisé | — |
403 | Action interdite (le projet est en cours de traitement ou terminé ou des éléments sont manquants) | — |
404 | Projet introuvable | — |
Try it
Developer reference
https://data.geopf.fr/geocodage50 requests/second per IP, documented by the provider as "50 appels/IP/seconde" -- exceeding it returns a 429 on every request for a 5-second block whose remaining duration is reported in a retry-after header, decaying once the caller backs off
- GET/search
- GET/reverse
Gotchas & limits
qis required — a live probe of/search/with noqparameter returned400 {"code":400,"message":"Failed parsing query","detail":["q: required param"]}rather than an empty result set or a default listing.- A query with no real match still returns
200with an emptyfeaturesarray (confirmed live with a nonsense query string), not a 404 or an error body — checkfeatures.length, not the HTTP status, to detect "no results". limitdefaults to 10 and caps at 50 — a live probe withlimit=100was rejected with400 {"code":400,"message":"Failed parsing query","detail":["limit: must be an integer between 1 and 50"]}. Results are always ordered by descendingproperties.score.- The rate limit is documented (not live-triggered in this run, to avoid hammering a shared public service) as 50 requests/second per IP; exceeding it returns a 429 on every request for a 5-second block whose remaining duration is reported in a
retry-afterheader, decaying once the caller backs off — per the provider's own "Limite d'usage" documentation.
Availability
Changelog
- gained an OpenAPI spec