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 - Espanhol
  • pt - Português
  • fr - Francês
  • de - Alemão
  • it - 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

  1. Cache agressivo: Países não mudam frequentemente
  2. Use carregamento lazy: Carregue países quando o dropdown receber foco
  3. Implemente busca: Para melhor UX com 200+ países
  4. 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

Guias de Integração Completos

Precisa de Ajuda?


Nota: O campo id retornado é um MongoDB ObjectId que identifica unicamente cada país em todos os endpoints. Use este ID ao consultar estados, cidades ou outros dados relacionados.