Selecionar Países
Obtenha todos os países otimizados para dropdowns e formulários
O endpoint /v1/select/countries retorna uma lista leve de todos os países com apenas os campos id e name, otimizado para menus dropdown e campos de formulário.
Endpoint
GET https://api.countrydataapi.com/v1/select/countries
Autenticação
Inclua sua chave de API como parâmetro de consulta:
?apikey=sua-chave-api
Sua chave de API é como uma senha, mantenha-a segura. Obtenha sua chave no painel da conta.
Parâmetros de Consulta
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
apikey |
string | Sim | Sua chave de autenticação da API |
lang |
string | Não | Código do idioma para nomes dos países (padrão: en) |
Idiomas Suportados
en- Inglês (padrão)es- Espanholpt- Portuguêsfr- Francêsde- Alemãoit- Italiano
Exemplo de Requisição
curl "https://api.countrydataapi.com/v1/select/countries?apikey=sua-chave-api&lang=pt"
JavaScript (Fetch)
const API_KEY = 'sua-chave-api';
async function carregarPaises() {
const response = await fetch(
`https://api.countrydataapi.com/v1/select/countries?apikey=${API_KEY}&lang=pt`
);
const data = await response.json();
return data;
}
JavaScript (Axios)
import axios from 'axios';
const response = await axios.get(
'https://api.countrydataapi.com/v1/select/countries',
{
params: {
apikey: 'sua-chave-api',
lang: 'pt',
},
}
);
Python
import requests
response = requests.get(
'https://api.countrydataapi.com/v1/select/countries',
params={
'apikey': 'sua-chave-api',
'lang': 'pt'
}
)
data = response.json()
PHP
<?php
$apiKey = 'sua-chave-api';
$url = "https://api.countrydataapi.com/v1/select/countries?apikey={$apiKey}&lang=pt";
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
$data = json_decode($response, true);
?>
Angular
// country.service.ts
import { Injectable } from '@angular/core';
import { HttpClient, HttpParams } from '@angular/common/http';
import { Observable } from 'rxjs';
import { map } from 'rxjs/operators';
interface Country {
id: string;
name: string;
}
interface ApiResponse {
success: boolean;
data: Country[];
}
@Injectable({
providedIn: 'root'
})
export class CountryService {
private readonly API_KEY = 'sua-chave-api';
private readonly BASE_URL = 'https://api.countrydataapi.com/v1';
constructor(private http: HttpClient) {}
getCountries(lang: string = 'pt'): Observable<Country[]> {
const params = new HttpParams()
.set('apikey', this.API_KEY)
.set('lang', lang);
return this.http.get<ApiResponse>(
`${this.BASE_URL}/select/countries`,
{ params }
).pipe(
map(response => response.data)
);
}
}
// country-select.component.ts
import { Component, OnInit } from '@angular/core';
import { CommonModule } from '@angular/common';
import { FormsModule } from '@angular/forms';
import { CountryService } from './country.service';
@Component({
selector: 'app-country-select',
standalone: true,
imports: [CommonModule, FormsModule],
template: `
<div *ngIf="loading">Carregando países...</div>
<div *ngIf="error" class="error">{{ error }}</div>
<select
*ngIf="!loading && !error"
[(ngModel)]="selectedCountry"
(ngModelChange)="onCountryChange($event)"
>
<option value="">Selecione um país...</option>
<option *ngFor="let country of countries" [value]="country.id">
{{ country.name }}
</option>
</select>
`
})
export class CountrySelectComponent implements OnInit {
countries: any[] = [];
selectedCountry = '';
loading = true;
error: string | null = null;
constructor(private countryService: CountryService) {}
ngOnInit() {
this.countryService.getCountries('pt').subscribe({
next: (data) => {
this.countries = data;
this.loading = false;
},
error: (err) => {
this.error = 'Falha ao carregar países';
this.loading = false;
}
});
}
onCountryChange(countryId: string) {
console.log('País selecionado:', countryId);
// Carregar estados, emitir evento, etc.
}
}
Formato da Resposta
Resposta de Sucesso
{
"success": true,
"data": [
{
"id": "66c7a6c9e4bda21f4ab10ef2",
"name": "Afeganistão"
},
{
"id": "66c7a6c9e4bda21f4ab10ef3",
"name": "Albânia"
},
{
"id": "66c7a6c9e4bda21f4ab10ef4",
"name": "Argélia"
}
// ... mais países (200+ no total)
]
}
Campos da Resposta
| Campo | Tipo | Descrição |
|---|---|---|
success |
boolean | Indica se a requisição foi bem-sucedida |
data |
array | Array de objetos de país |
data[].id |
string | Identificador único do país (MongoDB ObjectId) |
data[].name |
string | Nome do país no idioma solicitado |
Resposta de Erro
{
"success": false,
"error": {
"code": "INVALID_API_KEY",
"message": "A chave de API fornecida é inválida"
}
}
Consulte a documentação de Códigos de Erro para todos os códigos de erro possíveis.
Tamanho da Resposta
O endpoint select é otimizado para banda mínima:
- Endpoint completo (
/v1/countries/all): ~500KB (inclui todos os dados do país) - Endpoint select (
/v1/select/countries): ~15KB (apenas id e name)
Isso torna o endpoint select 97% menor e perfeito para dropdowns de formulários!
Uso de Tokens
Este endpoint consome 1 token por requisição.
Dica: Armazene a resposta em cache no localStorage ou no estado da sua aplicação. Países raramente mudam, então você pode cachear com segurança por 7+ dias.
Casos de Uso
1. Menu Dropdown
<select id="country">
<option value="">Selecione o país...</option>
<!-- Preenchido via JavaScript -->
</select>
<script>
async function popularPaises() {
const response = await fetch(
'https://api.countrydataapi.com/v1/select/countries?apikey=sua-chave-api&lang=pt'
);
const { data } = await response.json();
const select = document.getElementById('country');
data.forEach(country => {
const option = new Option(country.name, country.id);
select.add(option);
});
}
popularPaises();
</script>
2. Componente React
import { useState, useEffect } from 'react';
function CountrySelect() {
const [countries, setCountries] = useState([]);
useEffect(() => {
fetch('https://api.countrydataapi.com/v1/select/countries?apikey=sua-chave-api&lang=pt')
.then(res => res.json())
.then(({ data }) => setCountries(data));
}, []);
return (
<select>
<option value="">Selecione o país...</option>
{countries.map(country => (
<option key={country.id} value={country.id}>
{country.name}
</option>
))}
</select>
);
}
3. Componente Vue
<script setup>
import { ref, onMounted } from 'vue';
const countries = ref([]);
onMounted(async () => {
const response = await fetch(
'https://api.countrydataapi.com/v1/select/countries?apikey=sua-chave-api&lang=pt'
);
const { data } = await response.json();
countries.value = data;
});
</script>
<template>
<select>
<option value="">Selecione o país...</option>
<option v-for="country in countries" :key="country.id" :value="country.id">
{{ country.name }}
</option>
</select>
</template>
Exemplo de Cache
Armazene países em cache no localStorage para minimizar chamadas de API:
const CACHE_KEY = 'countries_cache';
const CACHE_DURATION = 7 * 24 * 60 * 60 * 1000; // 7 dias
async function getPaises() {
// Verificar cache primeiro
const cached = localStorage.getItem(CACHE_KEY);
if (cached) {
const { data, timestamp } = JSON.parse(cached);
if (Date.now() - timestamp < CACHE_DURATION) {
return data;
}
}
// Buscar da API
const response = await fetch(
'https://api.countrydataapi.com/v1/select/countries?apikey=sua-chave-api&lang=pt'
);
const { data } = await response.json();
// Salvar em cache
localStorage.setItem(CACHE_KEY, JSON.stringify({
data,
timestamp: Date.now()
}));
return data;
}
Exemplo Multilíngue
Alterne entre idiomas dinamicamente:
function carregarPaises(idioma = 'pt') {
return fetch(
`https://api.countrydataapi.com/v1/select/countries?apikey=sua-chave-api&lang=${idioma}`
).then(res => res.json());
}
// Carregar em espanhol
const paisesEspanhol = await carregarPaises('es');
// Carregar em francês
const paisesFrances = await carregarPaises('fr');
Dicas de Performance
- Cache agressivo: Países não mudam frequentemente
- Use carregamento lazy: Carregue países quando o dropdown receber foco
- Implemente busca: Para melhor UX com 200+ países
- Pré-carregue no carregamento da página: Busque em segundo plano enquanto o usuário lê o conteúdo
Limites de Taxa
- Plano gratuito: 100 requisições/dia
- Plano Basic: 1.000 requisições/dia
- Plano Pro: 10.000 requisições/dia
- Plano Enterprise: Ilimitado
Confira nossa página de preços para mais detalhes.
Endpoints Relacionados
- GET /v1/select/states - Obter estados por país
- GET /v1/select/cities - Obter cidades por estado
- GET /v1/countries/all - Obter dados completos dos países
Guias de Integração Completos
- Formulário de Endereço com Selects em Cascata - JavaScript Vanilla
- Integração React - Hooks personalizados
- Integração Vue - Composables
Precisa de Ajuda?
- Consulte nossa documentação de Códigos de Erro
- Veja o guia de Autenticação
- Entre em contato com o suporte através do painel da sua conta
Nota: O campo
idretornado é um MongoDB ObjectId que identifica unicamente cada país em todos os endpoints. Use este ID ao consultar estados, cidades ou outros dados relacionados.