Der Endpunkt /v1/places/autocomplete treibt das Adressfeld eines Checkouts, eines Registrierungsformulars oder eines Versandkostenrechners an. Sie senden, was der Nutzer bisher eingegeben hat, und erhalten nach Relevanz sortierte Vorschläge — jeder bereits mit seiner vollständigen Hierarchie, sodass Sie Madrid, Autonome Gemeinschaft Madrid, Spanien ohne einen zweiten Aufruf anzeigen können.
Er deckt die Ebenen Land, Bundesland und Stadt ab. Er deckt keine Adressen auf Straßenebene und keine Points of Interest wie Geschäfte, Öffnungszeiten oder Bewertungen ab.
GET https://api.countrydataapi.com/v1/places/autocomplete
| Parameter | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
apikey |
string | Ja | Ihr API-Authentifizierungsschlüssel |
q |
string | Ja | Was der Nutzer getippt hat. Mindestens 2 Zeichen |
country |
string | Nein | Beschränkt die Ergebnisse auf ein Land: interne ID, ISO-2, ISO-3 oder Name |
types |
string | Nein | Zu durchsuchende Ebenen, kommagetrennt: country, state, city. Standard: alle drei |
limit |
number | Nein | Anzahl der Vorschläge, 1-20. Standard: 5 |
lang |
string | Nein | Sprache der zurückgegebenen Namen. Standard: en |
sessiontoken |
string | Nein | Fasst alle Tastendrücke eines Feldes zu einer einzigen abrechenbaren Sitzung zusammen |
Die Anfrage wird vor der Suche normalisiert, damit der Nutzer nicht gegen seine Tastatur kämpfen muss:
avila findet Ávila, munchen findet München.hospitalet findet L'Hospitalet de Llobregat.york findet New York, nicht nur Namen, die mit York beginnen.Die Ergebnisse werden nach Trefferqualität sortiert (exakter Name, dann Namensanfang, dann Anfang eines inneren Wortes), danach von der weiteren zur engeren Verwaltungsebene und zuletzt nach Namenslänge. Das Feld match jedes Vorschlags gibt an, welche Regel gegriffen hat — praktisch zum Hervorheben im Text.
curl "https://api.countrydataapi.com/v1/places/autocomplete?apikey=ihr-api-schluessel&q=mad&country=ES&limit=5&lang=de"
const API_KEY = 'ihr-api-schluessel';
async function search(query, sessionToken) {
const params = new URLSearchParams({
apikey: API_KEY,
q: query,
limit: '5',
lang: 'de',
sessiontoken: sessionToken,
});
const response = await fetch(
`https://api.countrydataapi.com/v1/places/autocomplete?${params}`
);
return response.json();
}
import requests
response = requests.get(
'https://api.countrydataapi.com/v1/places/autocomplete',
params={
'apikey': 'ihr-api-schluessel',
'q': 'mad',
'country': 'ES',
'limit': 5,
'lang': 'de',
},
)
data = response.json()
import { CountryDataApi, Places } from '@countrydataapi/sdk';
const api = new CountryDataApi({ apiKey: 'ihr-api-schluessel' });
const session = Places.createSession();
const { suggestions } = await api.places.autocomplete({
q: 'mad',
country: 'ES',
lang: 'de',
sessiontoken: session,
});
{
"success": true,
"query": "mad",
"suggestions": [
{
"id": "66c7a6c9e4bda21f4ab1a0f1",
"type": "city",
"name": "Madrid",
"description": "Madrid, Autonome Gemeinschaft Madrid, Spanien",
"match": "prefix",
"components": {
"city": { "id": "66c7a6c9e4bda21f4ab1a0f1", "name": "Madrid" },
"state": { "id": "66c7a6c9e4bda21f4ab10a22", "name": "Autonome Gemeinschaft Madrid" },
"country": {
"id": "66c7a6c9e4bda21f4ab10ef2",
"name": "Spanien",
"iso2": "ES",
"iso3": "ESP",
"phone_code": "+34",
"flag": "🇪🇸"
}
}
}
],
"count": 1,
"session": { "token": "6f9e...", "billed": true, "ttl_seconds": 180 },
"tokens_used": 1,
"remaining_tokens": 4871
}
| Feld | Typ | Beschreibung |
|---|---|---|
suggestions[].id |
string | An /v1/places/details weiterreichen |
suggestions[].type |
string | country, state oder city |
suggestions[].name |
string | Name in der angeforderten Sprache |
suggestions[].description |
string | Fertig zur Anzeige: "Madrid, Autonome Gemeinschaft Madrid, Spanien" |
suggestions[].match |
string | exact, prefix oder word |
suggestions[].components |
object | Aufgelöste Hierarchie: city, state, country |
session |
object | Nur vorhanden, wenn Sie einen sessiontoken gesendet haben. billed gibt an, ob dieser Aufruf berechnet wurde |
Eine Autovervollständigung löst bei jedem Tastendruck eine Anfrage aus. Pro Anfrage abzurechnen würde bedeuten, dass ein einziges Adressfeld 8 bis 10 Token kostet und Ihre Rechnung davon abhängt, wie schnell Ihre Nutzer tippen.
Senden Sie einen sessiontoken — eine beliebige UUID, erzeugt beim Fokussieren des Feldes — und die gesamte Sitzung kostet 1 Token, unabhängig davon, wie viele Anfragen nötig waren:
/autocomplete-Aufruf. Nur der erste wird berechnet./details-Aufruf für den vom Nutzer gewählten Vorschlag. Dieser Aufruf ist kostenlos und schließt die Sitzung.Sitzungen laufen nach 3 Minuten ab. Ohne sessiontoken kostet jede Anfrage 1 Token.
// Eine Sitzung pro Adressfeld
let session = crypto.randomUUID();
input.addEventListener('focus', () => { session = crypto.randomUUID(); });
// ...jeder Tastendruck nutzt `session` weiter, das ganze Feld kostet also 1 Token
{
"success": false,
"error": {
"code": "INVALID_PARAMETER",
"message": "Parameter \"q\" is required and must be at least 2 characters long.",
"status": 400
},
"message": "Parameter \"q\" is required and must be at least 2 characters long."
}
Anders als die älteren Endpunkte gibt /v1/places/* einen echten HTTP-Statuscode (400, 401, 402, 404) zusammen mit einem stabilen error.code zurück. Siehe die Dokumentation der Fehlercodes.
/v1/* sendet Access-Control-Allow-Origin: *, Sie können die Autovervollständigung also ohne Proxy direkt aus Ihrem Frontend aufrufen. Bedenken Sie, dass der API-Schlüssel dann für jeden sichtbar ist, der die Entwicklertools öffnet: Verwenden Sie einen Schlüssel mit einem Budget, dessen Offenlegung für Sie vertretbar ist, oder leiten Sie über Ihr eigenes Backend, wenn Ihnen das wichtig ist.
country, wenn Sie es bereits kennen. Weniger und bessere Vorschläge.types=city, wenn das Feld gezielt eine Stadt erfasst.