Der Endpunkt /v1/places/validate nimmt Land, Bundesland, Stadt und Postleitzahl entgegen, die ein Nutzer eingegeben hat, und sagt Ihnen — Komponente für Komponente —, ob diese Kombination tatsächlich existiert. Zurück kommen die kanonische Schreibweise und, wenn etwas nicht passt, die naheliegendste Korrektur.
Es ist der letzte Schritt, bevor Sie eine Lieferadresse speichern: Die Autovervollständigung führt den Nutzer, dies bestätigt, wobei er gelandet ist — auch bei von Hand eingegebenen oder anderswo importierten Adressen.
GET https://api.countrydataapi.com/v1/places/validate
POST https://api.countrydataapi.com/v1/places/validate
Beide akzeptieren dieselben Felder. GET ist eine einfache CORS-Anfrage und funktioniert daher ohne Preflight aus dem Browser; POST nimmt sie in einem JSON-Body entgegen.
| Parameter | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
apikey |
string | Ja | Ihr API-Authentifizierungsschlüssel |
country |
string | Ja | Interne ID, ISO-2, ISO-3 oder Name |
state |
string | Nein | Name des Bundeslandes oder der Provinz |
city |
string | Nein | Name der Stadt |
zipcode |
string | Nein | Postleitzahl |
lang |
string | Nein | Sprache der zurückgegebenen Namen. Standard: en |
Komponenten, die Sie nicht senden, kommen mit dem Urteil not_provided zurück: Nichts, was Sie weglassen, kann die Adresse ungültig machen.
curl "https://api.countrydataapi.com/v1/places/validate?apikey=ihr-api-schluessel&country=ES&state=Madrid&city=Madrid&zipcode=28001&lang=de"
const response = await fetch(
'https://api.countrydataapi.com/v1/places/validate',
{
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
apikey: 'ihr-api-schluessel',
country: 'ES',
state: 'Madrid',
city: 'Madrid',
zipcode: '28001',
lang: 'de',
}),
}
);
const { result } = await response.json();
const { result } = await api.places.validate({
country: 'ES',
zipcode: '28001',
lang: 'de',
});
result.normalized.state?.name; // "Autonome Gemeinschaft Madrid"
{
"success": true,
"result": {
"valid": true,
"has_corrections": false,
"verdict": {
"country": "confirmed",
"state": "confirmed",
"city": "confirmed",
"zipcode": "confirmed"
},
"normalized": {
"country": {
"id": "66c7a6c9e4bda21f4ab10ef2",
"name": "Spanien",
"iso2": "ES",
"iso3": "ESP",
"phone_code": "+34",
"flag": "🇪🇸"
},
"state": { "id": "66c7a6c9e4bda21f4ab10a22", "name": "Autonome Gemeinschaft Madrid" },
"city": { "id": "66c7a6c9e4bda21f4ab1a0f1", "name": "Madrid" },
"zipcode": "28001"
},
"corrections": [],
"postal": {
"format": "#####",
"regex": "^\\d{5}$",
"example": "12345",
"matches_format": true
}
},
"tokens_used": 1,
"remaining_tokens": 4870
}
| Urteil | Bedeutung |
|---|---|
confirmed |
Der Wert existiert und entspricht genau dem Gesendeten |
corrected |
Die Komponente wurde aufgelöst, aber nicht aus dem Gesendeten — siehe corrections |
unconfirmed |
Der Wert konnte nicht bestätigt werden |
not_provided |
Sie haben diese Komponente nicht gesendet |
valid ist nur dann true, wenn alle von Ihnen gesendeten Komponenten als confirmed zurückkommen. Nutzen Sie has_corrections, um zu entscheiden, ob Sie dem Nutzer ein "Meinten Sie ...?" statt einer Fehlermeldung zeigen.
Der übliche Fall im Checkout: Sie haben nur Postleitzahl und Stadt abgefragt.
curl "https://api.countrydataapi.com/v1/places/validate?apikey=ihr-api-schluessel&country=ES&zipcode=28001&lang=de"
Die Antwort füllt normalized.state aus der Postleitzahl, sodass Sie das Provinzfeld für den Nutzer ausfüllen können, statt danach zu fragen. Umgekehrt funktioniert es genauso: Senden Sie eine Stadt, und das Bundesland kommt aufgelöst zurück.
Die Abdeckung mit Postleitzahlen ist nicht für jedes Land vollständig. Ist eine Zahl nicht gelistet, entspricht aber dem offiziellen Format des Landes, lautet das Urteil corrected statt unconfirmed, und postal.matches_format ist true. Behandeln Sie das als "plausibel, akzeptieren", sofern Ihr Anwendungsfall keine Gewissheit verlangt.
matches_format ist null, wenn für das Land kein offizielles Muster hinterlegt ist.
{
"valid": false,
"has_corrections": true,
"verdict": { "country": "confirmed", "state": "unconfirmed", "city": "confirmed", "zipcode": "not_provided" },
"corrections": [
{ "component": "state", "input": "Cataluna", "suggestion": "Cataluña" }
]
}
Dieser Endpunkt verbraucht 1 Token pro Anfrage, unabhängig davon, wie viele Komponenten Sie senden.