Adresses
Formulaire d'inscription, fiche CRM, fichier importé : une partie des adresses saisies contient une coquille ou n'existe pas. Ces quatre endpoints couvrent le cycle complet : suggérer pendant la frappe, vérifier après saisie, consulter une fiche, chercher autour d'un point.
| Endpoint | Quand l'utiliser | Plan minimum |
|---|---|---|
GET /address/autocomplete |
Champ de saisie interactif — suggestions au fil de la frappe | Discovery |
POST /address/verify |
Adresse déjà saisie (formulaire, CRM, import) — obtenir un verdict | Discovery |
GET /address/view/{id} |
Re-consulter une fiche déjà résolue, sans repasser par une recherche | Discovery |
GET /address/proximity |
Adresses de la BAN présentes autour d'un point (rayon en mètres) | Growth |
GET /address/autocomplete — suggestions en direct
Branchez cet endpoint sur un champ de saisie : à chaque frappe, il retourne des suggestions classées par pertinence pour guider l'utilisateur vers une adresse qui existe réellement dans la BAN.
curl -H "Authorization: Bearer VOTRE_CLE_API" \
"https://api.trustydata.app/services/v1/address/autocomplete?q=32+bis+rue+de+labbeville"
{
"status": "OK",
"message": "",
"suggestions": [
{
"score": 0.99,
"adresse": "32 bis Rue de Labbeville, 95690 Nesles-la-Vallée",
"id": "9fdb209a-6862-4d1c-8ad7-aea35bd2cbd0",
"numero": "32",
"rep": "bis",
"nom_voie": "Rue de Labbeville",
"code_postal": "95690",
"nom_commune": "Nesles-la-Vallée",
"code_insee": "95446",
"id_ban": "95446_0440_00032_bis",
"position": {
"lat": 49.130633,
"lon": 2.163253,
"x": 638928.82,
"y": 6892638.86,
"type_position": "segment"
},
"geocoding": {
"iris": "0000",
"code_iris": "954460000",
"nom_iris": "Nesles-la-Vallée",
"type_iris": "Z"
},
"statistical_grid": { "…": "…" }
}
]
}
Réponse obtenue en plan
Business :
position (dès Starter), geocoding (dès
Growth) et statistical_grid (dès Business — tronqué
ici, une trentaine d'indicateurs INSEE Filosofi) s'ajoutent
progressivement selon le plan. Le champ score (0 à 1)
indique la confiance du rapprochement ; pour la suggestion
retenue, stockez id_ban (l'identifiant stable du
référentiel BAN) plutôt que id, qui n'est qu'un
identifiant technique côté TrustyData.
POST /address/verify — vérifier une adresse déjà saisie
Quand l'utilisateur a déjà validé une adresse — un formulaire soumis, une fiche CRM, une ligne de fichier importé — vérifiez-la en un appel : la réponse retourne un verdict explicite plutôt qu'une simple liste de candidats.
curl -X POST "https://api.trustydata.app/services/v1/address/verify" \
-H "Authorization: Bearer VOTRE_CLE_API" \
-H "Content-Type: application/json" \
-d '{"q":"10 av Champs Elysee Paris"}'
{
"status": "success",
"message": "",
"matches": [
{
"score": 0.883,
"verdict": "match_probable",
"adresse": "10 Avenue des Champs Elysées, 75008 Paris 8e Arrondissement",
"id": "f9141266-72d0-4f7b-a3a1-f5e97af95e92",
"numero": "10",
"nom_voie": "Avenue des Champs Elysées",
"code_postal": "75008",
"nom_commune": "Paris 8e Arrondissement",
"code_insee": "75108",
"id_ban": "75108_1733_00010",
"position": {
"lat": 48.867887,
"lon": 2.315269,
"x": 649770.24,
"y": 6863313.14,
"type_position": "parcelle"
},
"geocoding": {
"iris": "2907",
"code_iris": "751082907",
"nom_iris": "Concorde Jardin Champs Élysées",
"type_iris": "D"
},
"statistical_grid": { "…": "…" }
}
]
}
Réponse obtenue en plan
Business
(mêmes paliers que ci-dessus pour position,
geocoding, statistical_grid). Le
verdict prime sur le score :
match_exact signale une correspondance fiable, à
accepter directement ; match_probable — comme ici,
pour une saisie abrégée et sans accent (« av », « Elysee ») —
signale un candidat plausible, à confirmer avant d'écraser la
donnée d'origine. Comme pour l'autocomplétion, stockez
id_ban, pas id.
GET /address/view/{id} — consulter une fiche stockée
Pour re-consulter plus tard une fiche déjà résolue — par exemple
ré-afficher le détail d'une adresse enregistrée en base sans
repasser par une recherche — utilisez l'identifiant id
renvoyé par autocomplete ou verify.
curl -H "Authorization: Bearer VOTRE_CLE_API" \
"https://api.trustydata.app/services/v1/address/view/9fdb209a-6862-4d1c-8ad7-aea35bd2cbd0"
{
"adresse": "32 bis Rue de Labbeville, 95690 Nesles-la-Vallée",
"id": "9fdb209a-6862-4d1c-8ad7-aea35bd2cbd0",
"numero": "32",
"rep": "bis",
"nom_voie": "Rue de Labbeville",
"code_postal": "95690",
"nom_commune": "Nesles-la-Vallée",
"code_insee": "95446",
"id_ban": "95446_0440_00032_bis",
"position": {
"lat": 49.130633,
"lon": 2.163253,
"x": 638928.82,
"y": 6892638.86,
"type_position": "segment"
},
"geocoding": {
"iris": "0000",
"code_iris": "954460000",
"nom_iris": "Nesles-la-Vallée",
"type_iris": "Z"
},
"statistical_grid": { "…": "…" }
}
Réponse obtenue en plan
Business. La
fiche n'a pas d'enveloppe status/matches
: elle reprend directement les champs de l'adresse, avec le même
enrichissement progressif par plan que les deux endpoints
précédents.
GET /address/proximity — chercher autour d'un point
Pour lister les adresses de la BAN présentes autour d'un point — zone de chalandise, rayon d'intervention, adresses voisines d'un point de vente — passez une adresse libre ou des coordonnées, et un rayon en mètres.
curl -G "https://api.trustydata.app/services/v1/address/proximity" \
-H "Authorization: Bearer VOTRE_CLE_API" \
--data-urlencode "adresse=1 rue de la Paix 75002 Paris" \
--data-urlencode "rayon=300"
{
"point_central": {
"lat": 48.868546,
"lon": 2.33031,
"adresse_resolue": "1 Rue de la Paix, 75002 Paris 2e Arrondissement",
"id": "235150cf-5b6c-4f9f-879f-002ec6dbe9fd"
},
"resultats": [
{
"adresse": "1 Rue de Caumartin, 75009 Paris 9e Arrondissement",
"id": "b98c89a3-dd78-4503-9901-04059077f359",
"id_ban": "75109_1617_00001",
"distance_m": 259,
"position": { "…": "…" },
"geocoding": { "…": "…" },
"statistical_grid": { "…": "…" }
},
{ "…": "…" }
],
"pagination": {
"offset": 0,
"limit": 10,
"total_estime": 538,
"tronque": false,
"next_offset": 10
}
}
Réponse tronquée, obtenue en plan
Business (page
de 10 résultats via l'outil interne utilisé pour cet exemple —
les 9 suivants ont la même structure que le premier ;
un appel HTTP direct sans paramètre limit pagine par
défaut sur 100). Les résultats sont triés par distance croissante
(distance_m, en mètres à vol d'oiseau) et reprennent
chacun la structure de view/{id}. La pagination est
stateless : suivez pagination.next_offset jusqu'à
null — elle s'arrête à l'offset 5 000 (pages de
100 par défaut, 200 au maximum) ; au-delà, ou si
pagination.tronque vaut true, réduisez
le rayon pour rester exhaustif.
Bonnes pratiques
Aucun résultat n'est un succès HTTP
status: "no_results" avec matches: []
est une réponse HTTP 200, pas une erreur —
testez toujours status avant de lire
matches[0]. Ci-dessous, la même requête
verify avec une adresse qui n'existe pas :
curl -X POST "https://api.trustydata.app/services/v1/address/verify" \
-H "Authorization: Bearer VOTRE_CLE_API" \
-H "Content-Type: application/json" \
-d '{"q":"999 avenue Inexistante 99999 Villeneulle"}'
{
"status": "no_results",
"message": "No verified match found",
"matches": []
}
Dans ce cas, renvoyez la saisie vers l'autocomplétion : proposer des suggestions à partir des premiers caractères valides aide l'utilisateur à corriger lui-même plutôt que de bloquer le formulaire sur une erreur muette.
Une adresse par requête
L'API traite une adresse par appel. Pour des volumes (qualification d'un fichier, dédoublonnage d'une base), intégrez-la dans un script ou un pipeline ETL côté client.
Richesse de la réponse par plan
La richesse de chaque réponse (autocomplete,
verify, view, et chaque résultat de
proximity) dépend du plan attaché à votre clé :
position dès
Starter,
géocodage IRIS dès
Growth, grille
statistique INSEE Filosofi en
Business —
détail champ par champ dans
Plans & quotas.
Prochains pas
- Plans & quotas — comprendre ce qu'ouvre chaque palier
- Codes d'erreur — gérer les 401, 403, 429
- Référence complète — tous les paramètres, tous les champs
- Démo — Vérifier une adresse — tester en direct sans écrire de code