API de Busca de Lugares

Pesquise lugares por nome ou coordenadas, com correspondência rápida de prefixo e filtros geográficos.

O que pode fazer?
Autocompletar instantâneo

Obtenha resultados rapidamente com pesquisa de prefixo tolerante a erros de digitação.

Geo-cercamento preciso

Pesquise por cidade, caixa delimitadora ou raio.

Metadados de lugar ricos

Retorna identificadores OSM, população, nome de exibição e mais.

Experimentar ao vivo
99.9 % Disponibilidade
93.7ms Resposta
20 req/s
0.009 Créditos / requisição

Find Place by Name


POST https://api.yeb.to/v1/place/find-by-name
Parameter Type Required Description
api_key string yes Your API key
q string yes Search text (city, village, etc)
country_code string opt 2-letter ISO country filter
limit int opt Max results (1-100, default 20)
offset int opt Pagination offset

Example

curl -X POST https://api.yeb.to/v1/place/find-by-name \
  -H "Content-Type: application/json" \
  -d '{
    "api_key": "YOUR_KEY",
    "q": "sofia",
    "country_code": "BG",
    "limit": 5
}'

Integrations

curl -X POST https://api.yeb.to/v1/place/find-by-name \
  -H "Content-Type: application/json" \
  -d '{"api_key":"YOUR_KEY","q":"sofia","country_code":"BG","limit":5}'
$r = Http::post('https://api.yeb.to/v1/place/find-by-name', [
    'api_key' => 'YOUR_KEY', 'q' => 'sofia', 'country_code' => 'BG', 'limit' => 5
]);
echo $r->json();
fetch('https://api.yeb.to/v1/place/find-by-name', {
  method:'POST',
  headers:{'Content-Type':'application/json'},
  body:JSON.stringify({api_key:'YOUR_KEY',q:'sofia',country_code:'BG',limit:5})
}).then(r=>r.json()).then(console.log);
import requests, json
payload = {"api_key":"YOUR_KEY","q":"sofia","country_code":"BG","limit":5}
r = requests.post('https://api.yeb.to/v1/place/find-by-name', headers={'Content-Type':'application/json'}, data=json.dumps(payload))
print(r.json())

Response Example

{
  "query": "sofia",
  "count": 1,
  "places": [
    {
      "id": 727011,
      "name": "Sofia",
      "country_code": "BG",
      "osm_id": 240109189,
      "osm_type": "relation",
      "type": "city",
      "population": 1286383,
      "lat": 42.6977,
      "lng": 23.3219,
      "bbox": {
        "min_lat": 42.582,
        "max_lat": 42.815,
        "min_lng": 23.042,
        "max_lng": 23.461
      },
      "address": {
        "city": "Sofia",
        "state": "Sofia City Province",
        "country": "Bulgaria"
      },
      "display_name": "Sofia, Bulgaria"
    }
  ]
}
{
  "error": "Missing place name (q)",
  "code": 400
}

Códigos de resposta

CódigoDescrição
200 SuccessRequisição processada OK.
400 Bad RequestValidação de entrada falhou.
401 UnauthorizedChave API em falta ou incorreta.
403 ForbiddenChave inativa ou não permitida.
429 Rate LimitDemasiadas requisições.
500 Server ErrorErro inesperado.

Find by Name

place/find-by-name 0.0090 credits

Parameters

API Key
query · string · required
Query
query · string · required
Country code
query · string
Limit
query · integer
Offset
query · integer

Code Samples


                
                
                
            

Response

Status:
Headers

                
Body

                

Find Place by Coordinates


POST https://api.yeb.to/v1/place/find-by-coord
Parameter Type Required Description
api_key string yes Your API key
lat float yes Latitude of centre point
lng float yes Longitude of centre point
radius float opt Radius in kilometers (default: 10)
limit int opt Max results (1-100, default 10)
offset int opt Pagination offset

Example

curl -X POST https://api.yeb.to/v1/place/find-by-coord \
  -H "Content-Type: application/json" \
  -d '{
    "api_key": "YOUR_KEY",
    "lat": 42.6977,
    "lng": 23.3219,
    "radius": 25,
    "limit": 3
}'

Integrations

curl -X POST https://api.yeb.to/v1/place/find-by-coord \
  -H "Content-Type: application/json" \
  -d '{"api_key":"YOUR_KEY","lat":42.6977,"lng":23.3219,"radius":25,"limit":3}'
$r = Http::post('https://api.yeb.to/v1/place/find-by-coord', [
    'api_key' => 'YOUR_KEY', 'lat' => 42.6977, 'lng' => 23.3219, 'radius' => 25, 'limit' => 3
]);
echo $r->json();
fetch('https://api.yeb.to/v1/place/find-by-coord', {
  method:'POST',
  headers:{'Content-Type':'application/json'},
  body:JSON.stringify({api_key:'YOUR_KEY',lat:42.6977,lng:23.3219,radius:25,limit:3})
}).then(r=>r.json()).then(console.log);
import requests, json
payload = {"api_key":"YOUR_KEY","lat":42.6977,"lng":23.3219,"radius":25,"limit":3}
r = requests.post('https://api.yeb.to/v1/place/find-by-coord', headers={'Content-Type':'application/json'}, data=json.dumps(payload))
print(r.json())

Response Example

{
  "lat": 42.6977,
  "lng": 23.3219,
  "radius_km": 25,
  "count": 3,
  "places": [
    {
      "id": 729530,
      "name": "Bankya",
      "country_code": "BG",
      "osm_id": 168422,
      "osm_type": "relation",
      "type": "town",
      "population": 10833,
      "lat": 42.706,
      "lng": 23.152,
      "dist_km": 12.3,
      "display_name": "Bankya, Sofia City Province, Bulgaria"
    }
  ]
}
{
  "error": "Missing lat/lng",
  "code": 400
}

Códigos de resposta

CódigoDescrição
200 SuccessRequisição processada OK.
400 Bad RequestValidação de entrada falhou.
401 UnauthorizedChave API em falta ou incorreta.
403 ForbiddenChave inativa ou não permitida.
429 Rate LimitDemasiadas requisições.
500 Server ErrorErro inesperado.

Find by Coordinates

place/find-by-coord 0.0090 credits

Parameters

API Key
query · string · required
Latitude
query · number · required
Longitude
query · number · required
Radius (km)
query · number
Limit
query · integer
Offset
query · integer

Code Samples


                
                
                
            

Response

Status:
Headers

                
Body

                

API de Busca de Lugares — Practical Guide

A hands-on guide to searching places by name or coordinates using API de Busca de Lugares: what each endpoint does, when to use it, which parameters actually matter, and how to interpret responses to power autosuggest, “near me”, and map fit features.

#What Place API solves

The Place API helps you turn free-form text or a map location into clean, structured place data: name, type (city/town/village), coordinates, optional population, and identifiers you can cache. It’s ideal for search boxes, checkouts, “near me” lists, and map zoom-to-fit.

#Endpoints & when to use them

#POST /v1/place/find-by-coord — Nearby places by point

  • Best for: “Near me” lists, centering a map, geo-fencing UIs.
  • How it works: You send lat/lng (and optionally radius); the API returns places within the radius sorted by distance, including dist_km.
  • Typical output: id, name, type, country_code, lat, lng, dist_km, and a human display_name.

#POST /v1/place/find-by-name — Text search

  • Best for: Search/autocomplete fields, onboarding flows.
  • How it works: You send q (and optionally country_code); the API returns matching places with optional bbox to instantly fit the map view.
  • Typical output: id, name, type, country_code, population, lat, lng, bbox, address.

#Quick start

# Nearby by point
curl -X POST "https://api.yeb.to/v1/place/find-by-coord" \
  -H "Content-Type: application/json" \
  -d '{ "api_key": "YOUR_KEY", "lat": 42.6977, "lng": 23.3219, "radius": 25, "limit": 3 }'
# Text search
curl -X POST "https://api.yeb.to/v1/place/find-by-name" \
  -H "Content-Type: application/json" \
  -d '{ "api_key": "YOUR_KEY", "q": "sofia", "country_code": "BG", "limit": 5 }'

#Parameters that actually matter

Common

ParamRequiredPractical guidance
api_key Yes Send from server/edge. Don’t embed a raw key in the browser.

/find-by-coord

ParamRequiredWhat to pass in practice
lat, lng Yes Make sure they’re WGS84 doubles (no strings). If taken from GPS, round to ~5 decimals for privacy.
radius No Kilometers. Start with 10; for rural searches 25–50; for dense cities 3–8.
limit, offset No Use for pagination/infinite scroll. Keep limit ≤ 50 for snappy UX.

/find-by-name

ParamRequiredWhat to pass in practice
q Yes Free-form user text. Send as-typed; we handle diacritics and casing.
country_code No ISO-3166-1 alpha-2 (e.g., US, BG). Great for disambiguating short names.
limit, offset No Autosuggest: limit=5..10. Backoffice search: limit=20..50.

#Reading & acting on responses

Nearby by coordinates — example

{
  "lat": 42.6977,
  "lng": 23.3219,
  "radius_km": 25,
  "count": 3,
  "places": [
    {
      "id": 729530,
      "name": "Bankya",
      "country_code": "BG",
      "osm_id": 168422,
      "osm_type": "relation",
      "type": "town",
      "population": 10833,
      "lat": 42.706,
      "lng": 23.152,
      "dist_km": 12.3,
      "display_name": "Bankya, Sofia City Province, Bulgaria"
    }
  ]
}
  • dist_km — great for sorting “nearest first” and drawing proximity badges.
  • type — city/town/village; helpful for UI microcopy (e.g., “Town of …”).
  • population — when present, use as a secondary sort for relevance.
  • id, osm_id, osm_type — stable identifiers you can cache/dedupe.

Search by name — example

{
  "query": "sofia",
  "count": 1,
  "places": [
    {
      "id": 727011,
      "name": "Sofia",
      "country_code": "BG",
      "osm_id": 240109189,
      "osm_type": "relation",
      "type": "city",
      "population": 1286383,
      "lat": 42.6977,
      "lng": 23.3219,
      "bbox": {
        "min_lat": 42.582, "max_lat": 42.815,
        "min_lng": 23.042, "max_lng": 23.461
      },
      "address": { "city": "Sofia", "state": "Sofia City Province", "country": "Bulgaria" },
      "display_name": "Sofia, Bulgaria"
    }
  ]
}
  • bbox — fit your map viewport instantly without guessing zoom levels.
  • address{...} — render breadcrumb/secondary text in lists.
  • Ambiguity: combine country_code filter + population to rank “the right Sofia”.

#Recommended actions

  • Autosuggest UX: call /find-by-name after 2–3 chars; limit to 5–10; display display_name.
  • “Near me” lists: call /find-by-coord with radius=10..25; show distance using dist_km.
  • Map integration: after selection, center on lat/lng; if bbox exists, do a fit-bounds.
  • Persistence: store id/osm_id to avoid duplicates and to refresh details later.

#Troubleshooting & field notes

  1. 400 “Missing lat/lng” or “Missing q”: send required params and ensure numeric types for coordinates.
  2. No results: increase radius (coords) or broaden q; remove country_code filter.
  3. Performance: keep limit tight (≤10 for typeahead) and paginate with offset for long lists.
  4. International names: the API handles diacritics; display display_name to avoid locale surprises.
  5. Rate limits: debounce input (≥250 ms); call on blur/enter for mobile to save requests.

#API Changelog

2025-10-20
Added dist_km to coordinate searches and bbox to name searches. Unified response fields (id, type, population, display_name) across endpoints.
2025-10-12
Introduced pagination with limit/offset. Improved ranking for ambiguous names using population signals.
2025-10-01
Public release of /find-by-coord and /find-by-name with country filter support.

Perguntas Frequentes

Cidades e vilas de dados OSM globais.

Sim, para consultas de 3+ caracteres, é utilizada pesquisa de texto completo e prefixo tolerante a erros.

Sim. Cada requisição, mesmo as que resultam em erros, consome créditos. Seus créditos estão vinculados ao número de requisições, independentemente de sucesso ou falha. Se o erro for claramente devido a um problema da plataforma do nosso lado, restauraremos os créditos afetados (sem reembolsos em dinheiro).

Contacte-nos em [email protected]. Levamos o feedback a sério—se o seu relatório de bug ou pedido de funcionalidade for significativo, podemos corrigir ou melhorar a API rapidamente e conceder-lhe 50 créditos gratuitos como agradecimento.

Depende da API e às vezes até do endpoint. Alguns endpoints usam dados de fontes externas, que podem ter limites mais rigorosos. Também aplicamos limites para prevenir abusos e manter a nossa plataforma estável. Consulte a documentação para o limite específico de cada endpoint.

Operamos com um sistema de créditos. Créditos são unidades pré-pagas e não reembolsáveis que gasta em chamadas API e ferramentas. Os créditos são consumidos por FIFO (os mais antigos primeiro) e são válidos por 12 meses a partir da data de compra. O painel mostra cada data de compra e a sua expiração.

Sim. Todos os créditos comprados (incluindo saldos fracionários) são válidos por 12 meses a partir da compra. Créditos não utilizados expiram automaticamente e são permanentemente eliminados no final do período de validade. Créditos expirados não podem ser restaurados ou convertidos em dinheiro ou outro valor. Regra de transição: créditos comprados antes de 22 de set. de 2025 são tratados como comprados em 22 de set. de 2025 e expiram em 22 de set. de 2026 (salvo indicação de expiração anterior na compra).

Sim—dentro do período de validade. Os créditos não utilizados permanecem disponíveis e são transferidos de mês para mês até expirarem 12 meses após a compra.

Os créditos são não reembolsáveis. Compre apenas o que precisa—pode sempre recarregar depois. Se um erro da plataforma causar uma cobrança falhada, podemos restaurar os créditos afetados após investigação. Sem reembolsos em dinheiro.

Os preços são definidos em créditos, não em dólares. Cada endpoint tem o seu próprio custo—veja o selo "Créditos / requisição" acima. Saberá sempre exatamente quanto está a gastar.
← Voltar às APIs