Documentação da API
Referência completa da API REST da Bamwor. Endpoints, parâmetros, autenticação, limites e formatos de resposta.
Base URL
https://bamwor.com/api/v1Autenticação
Inclua sua API key em cada requisição usando um destes métodos:
X-API-Key: bw_live_your_key_here
# or
Authorization: Bearer bw_live_your_key_hereRequisições anônimas (sem key) são permitidas com limites menores: 10/min, 100/dia.
Limites de Uso
| Plan | Por minuto | Por dia | Preço |
|---|---|---|---|
| Anonymous | 10 | 100 | Grátis (sem key) |
| Free | 30 | 1,000 | $0 |
| Pro | 120 | 50,000 | $29/mo |
| Enterprise | 600 | 500,000 | Personalizado |
Os headers de rate limit são incluídos em cada resposta: X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset.
Paginação
Endpoints paginados aceitam os parâmetros page e per_page. Padrão: page=1, per_page=25 (máx 100).
{
"data": [...],
"pagination": {
"page": 1,
"per_page": 25,
"total": 261,
"total_pages": 11
},
"meta": {
"request_id": "req_abc123",
"timestamp": "2026-03-11T10:00:00.000Z",
"cached": true
}
}Tratamento de Erros
{
"error": {
"code": "NOT_FOUND",
"message": "Country \"xyz\" not found.",
"status": 404
},
"meta": {
"request_id": "req_abc123",
"timestamp": "2026-03-11T10:00:00.000Z"
}
}| Status | Code | Descrição |
|---|---|---|
| 400 | BAD_REQUEST | Parâmetros inválidos |
| 401 | INVALID_API_KEY | API key inválida ou ausente |
| 403 | API_KEY_DISABLED | API key desabilitada |
| 404 | NOT_FOUND | Recurso não encontrado |
| 429 | RATE_LIMIT_EXCEEDED | Muitas requisições |
| 500 | INTERNAL_ERROR | Erro do servidor |
Referência de Endpoints
/api/v1/countriesLista paginada de todos os países com estatísticas básicas.
| Name | Type | Required | Description |
|---|---|---|---|
page | integer | No | Page number (default: 1) |
per_page | integer | No | Items per page (default: 25, max: 100) |
region | string | No | Filter by region slug (e.g. south-america) |
sort | string | No | Sort by: name, population, area (default: name) |
curl -H "X-API-Key: bw_live_your_key" \
"https://bamwor.com/api/v1/countries?sort=population&per_page=5"{
"data": [
{
"iso_code": "CH",
"names": { "en": "China", "es": "China", "pt": "China", "it": "Cina" },
"slugs": { "en": "china", "es": "china", "pt": "china", "it": "cina" },
"coordinates": { "latitude": 35.0, "longitude": 105.0 },
"region": { "slug": "east-southeast-asia", "name": "East & Southeast Asia" },
"population": 1416043270,
"area_sq_km": 9596960,
"category": "country"
}, ...
],
"pagination": { "page": 1, "per_page": 5, "total": 261, "total_pages": 53 }
}/api/v1/countries/:slugDetalhe completo do país com todas as estatísticas.
| Name | Type | Required | Description |
|---|---|---|---|
slug | string | Yes | Country slug in any language (e.g. argentina, japon, stati-uniti) |
curl -H "X-API-Key: bw_live_your_key" \
https://bamwor.com/api/v1/countries/japan{
"data": {
"iso_code": "JA",
"names": { "en": "Japan", "es": "Japón", "pt": "Japão", "it": "Giappone" },
"stats": {
"population": { "value": 123719238, "unit": null, "year": 2025, "source": "CIA World Factbook" },
"area_sq_km": { "value": 377915, ... },
"gdp_nominal": { "value": 4230862, ... },
...
},
"flag_url": "/flags/ja.png",
"map_url": "/maps/ja.png"
}
}/api/v1/countries/:slug/citiesCidades paginadas dentro de um país.
| Name | Type | Required | Description |
|---|---|---|---|
slug | string | Yes | Country slug |
sort | string | No | Sort by: population, name (default: population) |
min_population | integer | No | Minimum population filter |
province | string | No | Filter by province/admin1 name |
page | integer | No | Page number |
per_page | integer | No | Items per page (max: 100) |
curl -H "X-API-Key: bw_live_your_key" \
"https://bamwor.com/api/v1/countries/brazil/cities?min_population=500000"{
"data": [
{
"id": 3448439,
"names": { "en": "São Paulo", "es": "São Paulo", ... },
"coordinates": { "latitude": -23.5475, "longitude": -46.6361 },
"population": 11967825,
"province": "São Paulo"
}, ...
],
"pagination": { "page": 1, "per_page": 25, "total": 17 }
}/api/v1/cities/:idDetalhe da cidade por ID do GeoNames.
| Name | Type | Required | Description |
|---|---|---|---|
id | integer | Yes | GeoNames ID (e.g. 3435910 for Buenos Aires) |
curl -H "X-API-Key: bw_live_your_key" \
https://bamwor.com/api/v1/cities/3435910{
"data": {
"id": 3435910,
"names": { "en": "Buenos Aires", ... },
"coordinates": { "latitude": -34.6132, "longitude": -58.3772 },
"population": 13076300,
"elevation": 31,
"timezone": "America/Argentina/Buenos_Aires",
"province": "Buenos Aires F.D.",
"country": { "name": "Argentina", "slug": "argentina", "iso_code": "AR" }
}
}/api/v1/cities/:id/nearbyEncontrar cidades próximas usando busca por raio PostGIS.
| Name | Type | Required | Description |
|---|---|---|---|
id | integer | Yes | Origin city GeoNames ID |
radius | integer | No | Radius in km (default: 50, max: 200) |
limit | integer | No | Max results (default: 10, max: 50) |
curl -H "X-API-Key: bw_live_your_key" \
"https://bamwor.com/api/v1/cities/3435910/nearby?radius=100&limit=5"{
"data": [
{
"id": 3432043,
"names": { "en": "La Plata", ... },
"coordinates": { "latitude": -34.9215, "longitude": -57.9545 },
"population": 694167,
"distance_km": 56.2
}, ...
]
}/api/v1/searchBuscar países e cidades por nome em qualquer um dos 4 idiomas suportados.
| Name | Type | Required | Description |
|---|---|---|---|
q | string | Yes | Search query (min 2 chars, max 100) |
type | string | No | Filter: all, country, city (default: all) |
limit | integer | No | Max results (default: 20, max: 50) |
curl -H "X-API-Key: bw_live_your_key" \
"https://bamwor.com/api/v1/search?q=tokyo&type=city"{
"data": [
{
"type": "city",
"id": 1850147,
"names": { "en": "Tokyo", "es": "Tokio", "pt": "Tóquio", "it": "Tokyo" },
"coordinates": { "latitude": 35.6895, "longitude": 139.6917 },
"population": 8336599,
"country_code": "JA"
}
]
}/api/v1/rankingsListar todas as métricas de ranking disponíveis.
curl -H "X-API-Key: bw_live_your_key" \
https://bamwor.com/api/v1/rankings{
"data": [
{ "slug": "population", "label": "Population", "url": "/api/v1/rankings/population" },
{ "slug": "area", "label": "Area (sq km)", "url": "/api/v1/rankings/area" },
{ "slug": "gdp", "label": "GDP (nominal)", "url": "/api/v1/rankings/gdp" },
{ "slug": "hdi", "label": "Human Development Index", "url": "/api/v1/rankings/hdi" },
...
]
}/api/v1/rankings/:slugRanking paginado de países por uma métrica específica.
| Name | Type | Required | Description |
|---|---|---|---|
slug | string | Yes | Metric: population, area, density, gdp, gdp-per-capita, hdi, life-expectancy |
region | string | No | Filter by region slug |
page | integer | No | Page number |
per_page | integer | No | Items per page (default: 50) |
curl -H "X-API-Key: bw_live_your_key" \
"https://bamwor.com/api/v1/rankings/population?region=south-america&per_page=5"{
"data": [
{
"rank": 1,
"country": {
"iso_code": "BR",
"names": { "en": "Brazil", ... },
"region": { "slug": "south-america", "name": "South America" }
},
"value": 220051512,
"unit": null,
"year": 2025
}, ...
],
"pagination": { "page": 1, "per_page": 5, "total": 14 }
}Gestão de API Keys
/api/v1/keysRegistrar uma nova API key grátis.
| Name | Type | Required | Description |
|---|---|---|---|
email | string | Yes | Your email address |
name | string | No | App or project name |
curl -X POST https://bamwor.com/api/v1/keys \
-H "Content-Type: application/json" \
-d '{"email": "[email protected]", "name": "My App"}'{
"data": {
"api_key": "bw_live_a1b2c3d4e5f6...",
"plan": "free",
"limits": { "per_minute": 30, "per_day": 1000 },
"message": "Store this key securely — it cannot be retrieved later."
}
}/api/v1/keys/usageVerificar o uso atual da sua API key e limites restantes.
curl -H "X-API-Key: bw_live_your_key" \
https://bamwor.com/api/v1/keys/usage{
"data": {
"plan": "free",
"usage": {
"minute": { "used": 5, "limit": 30, "resets_in": 42 },
"day": { "used": 127, "limit": 1000, "resets_in": 54321 }
}
}
}