Documentação

Select Countries

Obtenha todos os paises otimizados para dropdowns e formularios

O endpoint /v1/select/countries retorna uma lista leve de todos os paises com apenas os campos id e name, otimizado para menus dropdown e campos de formulario.

Endpoint

GET https://api.countrydataapi.com/v1/select/countries

Autenticacao

Inclua sua chave de API como parametro de consulta:

?apikey=sua-chave-api

Sua chave de API e como uma senha, mantenha-a segura. Obtenha sua chave no painel da conta.

Parametros de Consulta

Parametro Tipo Obrigatorio Descricao
apikey string Sim Sua chave de autenticacao da API
lang string Nao Codigo do idioma para nomes dos paises (padrao: en)

Idiomas Suportados

  • en - Ingles (padrao)
  • es - Espanhol
  • pt - Portugues
  • fr - Frances
  • de - Alemao
  • it - Italiano

Exemplo de Requisicao

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 paises...</div>
    <div *ngIf="error" class="error">{{ error }}</div>
    <select
      *ngIf="!loading && !error"
      [(ngModel)]="selectedCountry"
      (ngModelChange)="onCountryChange($event)"
    >
      <option value="">Selecione um pais...</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 paises';
        this.loading = false;
      }
    });
  }

  onCountryChange(countryId: string) {
    console.log('Pais selecionado:', countryId);
    // Carregar estados, emitir evento, etc.
  }
}

Formato da Resposta

Resposta de Sucesso

{
  "success": true,
  "data": [
    {
      "id": "66c7a6c9e4bda21f4ab10ef2",
      "name": "Afeganistao"
    },
    {
      "id": "66c7a6c9e4bda21f4ab10ef3",
      "name": "Albania"
    },
    {
      "id": "66c7a6c9e4bda21f4ab10ef4",
      "name": "Argelia"
    }
    // ... mais paises (200+ no total)
  ]
}

Campos da Resposta

Campo Tipo Descricao
success boolean Indica se a requisicao foi bem-sucedida
data array Array de objetos de pais
data[].id string Identificador unico do pais (MongoDB ObjectId)
data[].name string Nome do pais no idioma solicitado

Resposta de Erro

{
  "success": false,
  "error": {
    "code": "INVALID_API_KEY",
    "message": "A chave de API fornecida e invalida"
  }
}

Consulte a documentacao de Codigos de Erro para todos os codigos de erro possiveis.

Tamanho da Resposta

O endpoint select e otimizado para banda minima:

  • Endpoint completo (/v1/countries/all): ~500KB (inclui todos os dados do pais)
  • Endpoint select (/v1/select/countries): ~15KB (apenas id e name)

Isso torna o endpoint select 97% menor e perfeito para dropdowns de formularios!

Uso de Tokens

Este endpoint consome 1 token por requisicao.

Dica: Armazene a resposta em cache no localStorage ou no estado da sua aplicacao. Paises raramente mudam, entao voce pode cachear com seguranca por 7+ dias.

Casos de Uso

1. Menu Dropdown

<select id="country">
  <option value="">Selecione o pais...</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 pais...</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 pais...</option>
    <option v-for="country in countries" :key="country.id" :value="country.id">
      {{ country.name }}
    </option>
  </select>
</template>

Exemplo de Cache

Armazene paises 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 Multilingue

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 frances
const paisesFrances = await carregarPaises('fr');

Dicas de Performance

  1. Cache agressivo: Paises nao mudam frequentemente
  2. Use carregamento lazy: Carregue paises quando o dropdown receber foco
  3. Implemente busca: Para melhor UX com 200+ paises
  4. Pre-carregue no carregamento da pagina: Busque em segundo plano enquanto o usuario le o conteudo

Limites de Taxa

  • Plano gratuito: 100 requisicoes/dia
  • Plano Basic: 1.000 requisicoes/dia
  • Plano Pro: 10.000 requisicoes/dia
  • Plano Enterprise: Ilimitado

Confira nossa pagina de precos para mais detalhes.

Endpoints Relacionados

Guias de Integracao Completos

Precisa de Ajuda?


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