O endpoint /v1/places/autocomplete é o motor do campo de endereço de um checkout, de um formulário de cadastro ou de uma calculadora de frete. Você envia o que o usuário digitou até agora e recebe sugestões ordenadas por relevância, cada uma já com sua hierarquia completa para que você possa exibir Madri, Comunidade de Madri, Espanha sem uma segunda chamada.
Cobre os níveis país, estado e cidade. Não cobre endereços em nível de rua nem pontos de interesse como estabelecimentos, horários de funcionamento ou avaliações.
GET https://api.countrydataapi.com/v1/places/autocomplete
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
apikey |
string | Sim | Sua chave de autenticação da API |
q |
string | Sim | O que o usuário digitou. Mínimo de 2 caracteres |
country |
string | Não | Restringe os resultados a um país: id interno, ISO-2, ISO-3 ou nome |
types |
string | Não | Níveis a buscar separados por vírgula: country, state, city. Padrão: os três |
limit |
number | Não | Número de sugestões, 1-20. Padrão: 5 |
lang |
string | Não | Idioma dos nomes retornados. Padrão: en |
sessiontoken |
string | Não | Agrupa todas as teclas de um campo em uma única sessão faturável |
A consulta é normalizada antes da busca, para que o usuário não precise brigar com o teclado:
avila encontra Ávila, munchen encontra München.hospitalet encontra L'Hospitalet de Llobregat.york encontra New York, não apenas os nomes que começam com York.Os resultados são ordenados pela qualidade da correspondência (nome exato, depois início do nome, depois início de uma palavra interna), em seguida do nível administrativo mais amplo ao mais específico e, por último, pelo tamanho do nome. O campo match de cada sugestão indica qual regra foi aplicada, o que é útil para destacar o texto.
curl "https://api.countrydataapi.com/v1/places/autocomplete?apikey=sua-chave-api&q=mad&country=ES&limit=5&lang=pt"
const API_KEY = 'sua-chave-api';
async function search(query, sessionToken) {
const params = new URLSearchParams({
apikey: API_KEY,
q: query,
limit: '5',
lang: 'pt',
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': 'sua-chave-api',
'q': 'mad',
'country': 'ES',
'limit': 5,
'lang': 'pt',
},
)
data = response.json()
import { CountryDataApi, Places } from '@countrydataapi/sdk';
const api = new CountryDataApi({ apiKey: 'sua-chave-api' });
const session = Places.createSession();
const { suggestions } = await api.places.autocomplete({
q: 'mad',
country: 'ES',
lang: 'pt',
sessiontoken: session,
});
{
"success": true,
"query": "mad",
"suggestions": [
{
"id": "66c7a6c9e4bda21f4ab1a0f1",
"type": "city",
"name": "Madri",
"description": "Madri, Comunidade de Madri, Espanha",
"match": "prefix",
"components": {
"city": { "id": "66c7a6c9e4bda21f4ab1a0f1", "name": "Madri" },
"state": { "id": "66c7a6c9e4bda21f4ab10a22", "name": "Comunidade de Madri" },
"country": {
"id": "66c7a6c9e4bda21f4ab10ef2",
"name": "Espanha",
"iso2": "ES",
"iso3": "ESP",
"phone_code": "+34",
"flag": "🇪🇸"
}
}
}
],
"count": 1,
"session": { "token": "6f9e...", "billed": true, "ttl_seconds": 180 },
"tokens_used": 1,
"remaining_tokens": 4871
}
| Campo | Tipo | Descrição |
|---|---|---|
suggestions[].id |
string | Passe para /v1/places/details |
suggestions[].type |
string | country, state ou city |
suggestions[].name |
string | Nome no idioma solicitado |
suggestions[].description |
string | Pronto para exibir: "Madri, Comunidade de Madri, Espanha" |
suggestions[].match |
string | exact, prefix ou word |
suggestions[].components |
object | Hierarquia resolvida: city, state, country |
session |
object | Presente apenas se você enviou um sessiontoken. billed indica se esta chamada foi cobrada |
Um autocompletar dispara uma requisição a cada tecla. Cobrar por requisição faria com que um único campo de endereço custasse 8-10 tokens e transformaria sua fatura em uma função da velocidade de digitação dos seus usuários.
Envie um sessiontoken — qualquer UUID, gerado quando o campo recebe o foco — e a sessão inteira custa 1 token, não importa quantas requisições foram necessárias:
/autocomplete. Apenas a primeira é cobrada./details da sugestão escolhida pelo usuário. Essa chamada é gratuita e encerra a sessão.As sessões expiram após 3 minutos. Sem sessiontoken, cada requisição custa 1 token.
// Uma sessão por campo de endereço
let session = crypto.randomUUID();
input.addEventListener('focus', () => { session = crypto.randomUUID(); });
// ...cada tecla reutiliza `session`, então o campo inteiro custa 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."
}
Diferente dos endpoints mais antigos, /v1/places/* retorna um código HTTP real (400, 401, 402, 404) junto de um error.code estável. Consulte a documentação de códigos de erro.
/v1/* envia Access-Control-Allow-Origin: *, então você pode chamar o autocompletar diretamente do seu frontend sem um proxy. Tenha em mente que a chave da API fica então visível para qualquer pessoa que abra as ferramentas de desenvolvedor: use uma chave com um orçamento que você se sinta confortável em expor, ou faça a chamada através do seu próprio backend se isso for importante para você.
country quando você já souber qual é. Menos sugestões e melhores.types=city se o campo for especificamente de cidade.