Getting started
- Getting started
- Introduction
- API description
- Summary of ressources
- Summary of operations
- Details of each operation
- operationId : normalizePortalAddress
- Requests examples
- Success case - without warning
- Success case - Suggested Localities + Locality choice
- Success case - Suggested streets + Street choice
- Success case - with Warning - unrecognized term
- Success case - with warning - street number not provided
- Success case - with warning - Hexacle not provided
- Error 400 - case - invalid locality
- Error 400 - case - invalid postal code
- Error 400 - case - invalid street name
- Error 400 - Case - out of bounds street number
- Case : Error 500
- ### Document history
Introduction
Prerequisite:
normalizePostalAddress API requires a Bearer Token. To get this token, you need to follow instructions as described in Authorization part with client credentials flow.
Glossary
Term | Definition |
---|---|
hexacleNumber | SNA Code for de number in the street |
hexacleStreet | SNA Code for the street |
hexavia | Internal SNA Code for the street |
SNA | "Service National de l'Adresse" : a french corporation which is a reference for French postal Adresses |
API description
Summary of ressources
Ressource | Definition |
---|---|
postal address | the postal address to normalize |
Summary of operations
There is only one operation available for postalAddress.
operation | verb | URL |
---|---|---|
normalizePostalAddress | POST | /customer-management/v1/postal-addresses/normalization |
Details of each operation
operationId : normalizePortalAddress
Description
-
This API allow to :
- Correct and check an address according to a location validator repository
- Normalize (with French Postal standard) an address
- Suggest localities or streets name if datas request are ambiguous.
-
The repository is updated monthly.
Securing the operation
- Secured with client credentials flow
normalizePostalAddress API requires a Bearer Token. To get this token, you need to follow instructions as described in Authorization part for client credentials flow.
Technical Parameters
Parameters | Definition |
---|---|
CONTENT-TYPE | application/json |
AUTHORIZATION | Bearer Token => Mandatory |
X-SOURCE | String allowing to identify explicitly the caller (ex: PARTNER_NAME) |
Functional Parameters
Parameters | Definition |
---|---|
streetNumber | Number in the street (ex: "2" or "2 ter") String - Optional |
streetName | Describe the street's name String - Optional |
additionalInformation | Additional information String - Optional |
postOfficeBox | Post Office Box String - Optional - Mandatory if the street name and the additionnal information are missing |
postCode | Post Code String - Optional - Mandatory if locality is missing |
locality | City Name String - Optional - Mandatory if the post code is missing |
valSuggestion | Internal Key provided by a first request with answer of type suggestedLocalities or suggestedStreetNames. All others parameters must be unchanged for the second request String - Optional |
Requests examples
Success case - without warning
In this example, we send a request with an addressing containing a streetName, additionalInformation, postCode and locality.
Request :
curl -X POST -d "{ \"streetNumber\":\"1\",\"streetName\":\"place de la paix\",\"additionalInformation":"appartement 114",\"postCode\":\"78190\",\"locality\":\"TRAPPES\"}" http://b-api-env-ap1.adb.dev.euw1.nbyt.fr/v1/customer-management/postal-addresses/normalization -H "Content-Type: application/json" -H "Authorization: Bearer at-ef003b10-01ec-402c-8719-d5313557df1a" -H "X-Source: PARTNER_NAME"
The API returns a simple response completing the address with hexacleNumber, hexacleStreet, hexavia and localityInseeCode.
It converts the previous address sent in body request in a standardized postal address. You can see for example that locality and streetName are in uppercases now.
Response :
HTTP/1.1 200 OK
Content-Type: application/json; charset=UTF-8
{
"normalizedPostalAddress": {
"hexacleNumber": "78621229HX",
"hexacleStreet": "78621229E9",
"hexavia": "03803036",
"locality": "TRAPPES",
"localityInseeCode": "78621",
"postCode": "78190",
"streetName": "PLACE DE LA PAIX",
"streetNumber": "1"
}
}
Success case - Suggested Localities + Locality choice
- Normalization in 2 steps following an ambiguity about the city
In this example, we begin to send a first address but without locality but with postCode "35650".
Request 1 : Response contains a list of localities
curl -X POST -d "{ \"streetNumber\":\"8\",\"streetName\":\"ajoncs\",\"postCode\":\"35650\"}" http://b-api-env-ap1.adb.dev.euw1.nbyt.fr/v1/customer-management/postal-addresses/normalization -H "Content-Type: application/json" -H "Authorization: Bearer at-ef003b10-01ec-402c-8719-d5313557df1a" -H "X-Source: PARTNER_NAME"
The API returns a 200 response but without normalized postal address. Instead it returns a list of two suggested localities.
Response :
HTTP/1.1 200 OK
Content-Type: application/json; charset=UTF-8
{
"suggestedLocalities": [
{
"coincidence": 95,
"inseeCode": "35240",
"locality": "LE RHEU",
"maxPostCode": "35659",
"minPostCode": "35650",
"suggestedDispatchLocality": "LE RHEU",
"suggestionNumber": 0,
"valSuggestion": "015299--------00000095---------------------23811C**"
},
{
"coincidence": 95,
"inseeCode": "35910",
"locality": "MOIGNE",
"maxPostCode": "35650",
"minPostCode": "35650",
"suggestedDispatchLocality": "LE RHEU",
"suggestionNumber": 1,
"valSuggestion": "015300--------00000095---------------------23811C**"
}
]
}
For getting a postal address, we need to send another request with the same body as before, except this time we will add a valSuggestion.
In this example, the address we are looking for is in Moigne locality so we add the value "015300--------00000095---------------------23811C" as valSuggestion.
Request 2 : The locality choice allow to validate address
curl -X POST -d "{ \"streetNumber\":\"8\",\"streetName\":\"ajoncs\",\"postCode\":\"35650\",\"valSuggestion\": \"015300--------00000095---------------------23811C**\"}" http://b-api-env-ap1.adb.dev.euw1.nbyt.fr/v1/customer-management/postal-addresses/normalization -H "Content-Type: application/json" -H "Authorization: Bearer at-ef003b10-01ec-402c-8719-d5313557df1a" -H "X-Source: PARTNER_NAME"
This second request returns a standardized postal address.
Response :
HTTP/1.1 200 OK
Content-Type: application/json; charset=UTF-8
{
"normalizedPostalAddress": {
"hexacleNumber": "35240223GU",
"hexacleStreet": "35240222AA",
"hexavia": "00675226",
"locality": "LE RHEU",
"localityInseeCode": "35240",
"postCode": "35650",
"streetName": "RUE DES AJONCS",
"streetNumber": "8"
}
}
Success case - Suggested streets + Street choice
- Normalization in 2 steps following an ambiguity about the street
We send a request with an incomplete streetName "vauguirard".
Request 1 : Response contains a list of streets
curl -X POST -d "{ \"streetNumber\":\"500\",\"streetName\":\"vaugirard\",\"postCode\":\"75006\",\"locality\":\"paris\"}" http://b-api-env-ap1.adb.dev.euw1.nbyt.fr/v1/customer-management/postal-addresses/normalization -H "Content-Type: application/json" -H "Authorization: Bearer at-ef003b10-01ec-402c-8719-d5313557df1a" -H "X-Source: PARTNER_NAME"
The response returns a list of three suggested street names.
Response :
HTTP/1.1 200 OK
Content-Type: application/json; charset=UTF-8
{
"suggestedStreetNames": [
{
"coincidence": 96,
"locality": "PARIS",
"postCode": "75006",
"streetName": "RUE DE VAUGIRARD",
"suggestionNumber": 0,
"valSuggestion": "012559--------00007100J00000---------------03357*S*"
},
{
"coincidence": 96,
"locality": "PARIS",
"postCode": "75015",
"streetName": "RUE DE VAUGIRARD",
"suggestionNumber": 1,
"valSuggestion": "012559--------00007100J00001---------------03357*S*"
},
{
"coincidence": 96,
"locality": "PARIS",
"postCode": "75015",
"streetName": "BOULEVARD DE VAUGIRARD",
"suggestionNumber": 2,
"valSuggestion": "012559--------00007100N0348004096----------03357*S*"
}
]
}
We resend the first request but this time with the proper valSuggestion: in this case, we are looking for "BOULEVARD DE VAUGIRARD".
Request 2 : The street choice allow to validate address
curl -X POST -d "{ \"streetNumber\":\"500\",\"streetName\":\"vaugirard\",\"postCode\":\"75006\",\"locality\":\"paris\",\"valSuggestion\": \"012559--------00007100N0348004096----------03357*S*\"}" http://b-api-env-ap1.adb.dev.euw1.nbyt.fr/v1/customer-management/postal-addresses/normalization -H "Content-Type: application/json" -H "Authorization: Bearer at-ef003b10-01ec-402c-8719-d5313557df1a" -H "X-Source: PARTNER_NAME"
This second request returns a standardized postal address but with a warning "MISSING_HEXACLE_NUMBER": there is no hexacleNumber returned.
Response :
HTTP/1.1 200 OK
Content-Type: application/json; charset=UTF-8
{
"normalizedPostalAddress": {
"hexacleStreet": "75115222MH",
"hexavia": "01456466",
"locality": "PARIS",
"localityInseeCode": "75115",
"postCode": "75015",
"streetName": "BOULEVARD DE VAUGIRARD",
"streetNumber": "500"
},
"warning": ["MISSING_HEXACLE_NUMBER"]
}
Success case - with Warning - unrecognized term
The case below shows a warning to inform that one or more terms have not been used to find the address.
We are looking for "13-15 avenue du maréchal juin" in "meudon-la-foret".
Request:
curl -X POST -d "{\"streetNumber\":\"13-15\",\"streetName\":\"avenue du maréchal juin\",\"additionalInformation\":\"technopole\",\"postCode\":\"92360\",\"locality\":\"meudon-la-foret\"}" http://b-api-env-ap1.adb.dev.euw1.nbyt.fr/v1/customer-management/postal-addresses/normalization -H "Content-Type: application/json" -H "Authorization: Bearer at-ef003b10-01ec-402c-8719-d5313557df1a" -H "X-Source: PARTNER_NAME"
In this example, the check is not able to recognize '13-15', it doesn't understand why there is two numbers and "-". The API only considers the first number "13".
The response returned is a warning: "UNRECOGNIZABLE_ITEM"
Response :
HTTP/1.1 200 OK
Content-Type: application/json; charset=UTF-8
{
"normalizedPostalAddress": {
"hexacleNumber": "9204822BAV",
"hexacleStreet": "92048222HI",
"hexavia": "01750446",
"locality": "MEUDON",
"localityInseeCode": "92048",
"postCode": "92360",
"streetName": "AVENUE DU MARECHAL JUIN",
"streetNumber": "13"
},
"warning": ["UNRECOGNIZABLE_ITEM"]
}
Success case - with warning - street number not provided
The case below shows a warning indicating that the address is validated but that there are street numbers while none has been entered.
0 is not considered like a street number: we send a request with a "0" StreetNumber.
Request:
curl -X POST -d "{\"streetNumber\":\"0\",\"streetName\":\"route HLM LE HETRE\",\"additionalInformation\":\"APPARTEMENT 26\",\"postCode\":\"50400\",\"locality\":\"GRANVILLE\"}" http://b-api-env-ap1.adb.dev.euw1.nbyt.fr/v1/customer-management/postal-addresses/normalization -H "Content-Type: application/json" -H "Authorization: Bearer at-ef003b10-01ec-402c-8719-d5313557df1a" -H "X-Source: PARTNER_NAME"
The response returns a 200 but with two warnings : "MISSING_STREET_NUMBER" and "MISSING_HEXACLE_NUMBER".
Response :
HTTP/1.1 200 OK
Content-Type: application/json; charset=UTF-8
{
"normalizedPostalAddress": {
"hexacleStreet": "502182224X",
"hexavia": "00994797",
"locality": "GRANVILLE",
"localityInseeCode": "50218",
"postCode": "50400",
"streetName": "HLM LE HETRE"
},
"warning": ["MISSING_STREET_NUMBER","MISSING_HEXACLE_NUMBER"]
}
Success case - with warning - Hexacle not provided
The case below shows a warning to inform that the number is not checked, the software cannot assign a hexacleNumber.
Request:
curl -X POST -d "{\"streetNumber\":\"54\",\"streetName\":\"avenue de varsovie\",\"postCode\":\"62300\",\"locality\":\"LENS\"}"
http://b-api-env-ap1.adb.dev.euw1.nbyt.fr/v1/customer-management/postal-addresses/normalization -H "Content-Type: application/json" -H "Authorization: Bearer at-ef003b10-01ec-402c-8719-d5313557df1a" -H "X-Source: PARTNER_NAME"
Response :
HTTP/1.1 200 OK
Content-Type: application/json; charset=UTF-8
{
"normalizedPostalAddress": {
"hexacleStreet": "624982222M",
"hexavia": "01238211",
"locality": "LENS",
"localityInseeCode": "62498",
"postCode": "62300",
"streetName": "AVENUE DE VARSOVIE",
"streetNumber": "54"
},
"warning": ["MISSING_HEXACLE_NUMBER"]
}
Error 400 - case - invalid locality
The case below shows a KO because the city is unknown from the repository.
Request :
curl -X POST -d "{\"streetNumber\":\"1\",\"streetName\":\"rue du poulpe rieur\",\"postCode\":\"35000\",\"locality\":\"r'lyeh\"}" http://b-api-env-ap1.adb.dev.euw1.nbyt.fr/v1/customer-management/postal-addresses/normalization
-H "Content-Type: application/json" -H "Authorization: Bearer at-ef003b10-01ec-402c-8719-d5313557df1a" -H "X-Source: PARTNER_NAME"
Response :
HTTP/1.1 400 Bad Request
Content-Type: application/json; charset=UTF-8
{
"error": "INVALID_LOCALITY",
"error_description": "La localité n’existe pas"
}
Error 400 - case - invalid postal code
The case below shows a KO because the postal code is unknown from the repository.
Request :
curl -X POST -d "{\"streetNumber\":\"4\",\"streetName\":\"place de bretagne\",\"postCode\":\"35999\"}" http://b-api-env-ap1.adb.dev.euw1.nbyt.fr/v1/customer-management/postal-addresses/normalization -H "Content-Type: application/json" -H "Authorization: Bearer at-ef003b10-01ec-402c-8719-d5313557df1a" -H "X-Source: PARTNER_NAME"
Response :
HTTP/1.1 400 Bad Request
Content-Type: application/json; charset=UTF-8
{
"error": "INVALID_POST_CODE",
"error_description": "Le code postal n’existe pas"
}
Error 400 - case - invalid street name
The case below shows a KO because the street name is unknown from the repository.
Request :
curl -X POST -d "{\"postOfficeBox\":\"BP36388\",\"postCode\":\"44000\",\"locality\":\"NANTES CEDEX 2\"}" http://b-api-env-ap1.adb.dev.euw1.nbyt.fr/v1/customer-management/postal-addresses/normalization -H "Content-Type: application/json" -H "Authorization: Bearer at-ef003b10-01ec-402c-8719-d5313557df1a" -H "X-Source: PARTNER_NAME"
Response :
HTTP/1.1 400 Bad Request
Content-Type: application/json; charset=UTF-8
{
"error": "INVALID_STREET_NAME",
"error_description": "La voie n’existe pas"
}
Error 400 - Case - out of bounds street number
The case below shows a KO because the street number is on a street shared between several cities but the number is not in the list of the chosen city.
Request :
curl -X POST -d "{\"streetNumber\":\"500\",\"streetName\":\"rue vaugirard\",\"postCode\":\"75015\",\"locality\":\"paris\"}" http://b-api-env-ap1.adb.dev.euw1.nbyt.fr/v1/customer-management/postal-addresses/normalization -H "Content-Type: application/json" -H "Authorization: Bearer at-ef003b10-01ec-402c-8719-d5313557df1a" -H "X-Source: PARTNER_NAME"
Response :
HTTP/1.1 400 Bad Request
Content-Type: application/json; charset=UTF-8
{
"error": "OUT_OF_BOUNDS_STREET_NUMBER",
"error_description": "L’adresse ne peut pas être validée car Uniserv propose une liste de secteurs de numéros"
}
Case : Error 500
Request :
curl -X POST -d "{\"streetNumber\":\"A\",\"streetName\":\"\",\"additionalInformation\":\"A\",\"postOfficeBox\":\"A\",\"postCode\":\"A\",\"locality\":\"1\"}" http://b-api-env-ap1.adb.dev.euw1.nbyt.fr/v1/customer-management/postal-addresses/normalization -H "Content-Type: application/json" -H "Authorization: Bearer at-ef003b10-01ec-402c-8719-d5313557df1a" -H "X-Source: PARTNER_NAME"
Response :
HTTP/1.1 500
Document history
Version | Modification Date | Updates | API concerned | API version |
---|---|---|---|---|
0.1 | 22/07/2021 | Initialization of the document | normalizePostalAddress | v1 |
0.2 | 23/07/2021 | Translate | normalizePostalAddress | v1 |
0.2.1 | 29/07/2021 | Annotations & Suggestions | normalizePostalAddress | v1 |