Les codes postaux ne se ressemblent pas d'un pays à l'autre : cinq chiffres en Espagne, SW1A 1AA au Royaume-Uni, K1A 0B1 au Canada. L'endpoint /v1/places/postal-format vous donne le format, l'expression régulière officielle et une valeur d'exemple par pays, pour que votre formulaire valide le champ dans le navigateur et affiche un placeholder qui a du sens.
GET https://api.countrydataapi.com/v1/places/postal-format
| Paramètre | Type | Requis | Description |
|---|---|---|---|
apikey |
string | Oui | Votre clé d'authentification API |
country |
string | Non | Id interne, ISO-2, ISO-3 ou nom. Omettez-le pour obtenir tous les pays |
lang |
string | Non | Langue des noms de pays. Par défaut en |
curl "https://api.countrydataapi.com/v1/places/postal-format?apikey=votre-cle-api&country=ES&lang=fr"
const response = await fetch(
'https://api.countrydataapi.com/v1/places/postal-format?apikey=votre-cle-api&lang=fr'
);
const { data } = await response.json();
// Indexer par ISO-2 pour des recherches instantanées dans le formulaire
const formats = Object.fromEntries(
data.map(({ country, postal }) => [country.iso2, postal])
);
localStorage.setItem('postal_formats', JSON.stringify(formats));
const { data } = await api.places.postalFormat({ country: 'ES' });
data[0].postal.regex; // "^\\d{5}$"
{
"success": true,
"data": [
{
"country": {
"id": "66c7a6c9e4bda21f4ab10ef2",
"name": "Espagne",
"iso2": "ES",
"iso3": "ESP",
"phone_code": "+34",
"flag": "🇪🇸"
},
"postal": {
"format": "#####",
"regex": "^\\d{5}$",
"example": "12345"
}
}
],
"count": 1,
"tokens_used": 1,
"remaining_tokens": 4869
}
format| Symbole | Signification |
|---|---|
# |
Un chiffre |
@ |
Une lettre |
| tout autre | Un caractère littéral (espace, tiret, préfixe pays...) |
Ainsi, @@# #@@ décrit un code postal britannique et produit l'exemple AB1 2CD.
example est généré à partir de format puis vérifié contre regex. Si les deux ne concordent pas, example vaut null plutôt qu'une valeur inventée à laquelle vous ne pourriez pas vous fier. Les pays sans système postal retournent null dans les trois champs.
function validatePostcode(value, iso2) {
const postal = formats[iso2];
if (!postal?.regex) return true; // aucun motif enregistré : on accepte tout
return new RegExp(postal.regex).test(value.trim());
}
// Sert aussi de placeholder
input.placeholder = formats[iso2]?.example ?? '';
Valider dans le navigateur est un confort d'utilisation, pas une garantie. Un code postal bien formé n'est pas nécessairement un code réel : confirmez-le avec /v1/places/validate avant d'expédier quoi que ce soit à cette adresse.
1 jeton par requête, que vous demandiez un seul pays ou tous.
Ces données ne changent quasiment jamais. Récupérez la liste complète une fois, mettez-la en cache et vous n'aurez plus besoin de cet endpoint pendant des mois. Vous êtes libre de la conserver aussi longtemps que vous le souhaitez.