API de Recherche de Lieux

Recherchez des lieux par nom ou coordonnées, avec correspondance rapide de préfixe et filtres géographiques.

Que pouvez-vous faire ?
Auto-complétion instantanée

Obtenez des résultats rapidement avec une recherche de préfixe tolérante aux fautes de frappe.

Géo-clôture précise

Recherchez par ville, zone englobante ou rayon.

Métadonnées de lieu enrichies

Renvoie les identifiants OSM, la population, le nom d'affichage et plus.

Essayer en direct
99.9 % Disponibilité
93.7ms Réponse
20 req/s
0.009 Crédits / requête

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
}

Codes de réponse

CodeDescription
200 SuccessRequête traitée avec succès.
400 Bad RequestValidation d'entrée échouée.
401 UnauthorizedClé API manquante ou incorrecte.
403 ForbiddenClé inactive ou non autorisée.
429 Rate LimitTrop de requêtes.
500 Server ErrorErreur inattendue.

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
}

Codes de réponse

CodeDescription
200 SuccessRequête traitée avec succès.
400 Bad RequestValidation d'entrée échouée.
401 UnauthorizedClé API manquante ou incorrecte.
403 ForbiddenClé inactive ou non autorisée.
429 Rate LimitTrop de requêtes.
500 Server ErrorErreur inattendue.

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 Recherche de Lieux — Practical Guide

A hands-on guide to searching places by name or coordinates using API de Recherche de Lieux: 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.

Questions fréquemment posées

Villes et villages à partir des données OSM mondiales.

Oui, pour les requêtes de 3+ caractères, une recherche plein texte et par préfixe tolérante aux fautes est utilisée.

Oui. Chaque requête, même celles qui entraînent des erreurs, consomme des crédits. Vos crédits sont liés au nombre de requêtes, indépendamment du succès ou de l'échec. Si l'erreur est clairement due à un problème de plateforme de notre côté, nous restaurerons les crédits affectés (pas de remboursement en espèces).

Contactez-nous à [email protected]. Nous prenons les retours au sérieux—si votre rapport de bug ou demande de fonctionnalité est pertinent, nous pouvons corriger ou améliorer l'API rapidement et vous accorder 50 crédits gratuits en guise de remerciement.

Cela dépend de l'API et parfois même du endpoint. Certains endpoints utilisent des données de sources externes, qui peuvent avoir des limites plus strictes. Nous imposons également des limites pour prévenir les abus et maintenir la stabilité de notre plateforme. Consultez la documentation pour la limite spécifique de chaque endpoint.

Nous fonctionnons avec un système de crédits. Les crédits sont des unités prépayées et non remboursables que vous dépensez pour les appels API et les outils. Les crédits sont consommés en FIFO (les plus anciens en premier) et sont valables 12 mois à compter de la date d'achat. Le tableau de bord affiche chaque date d'achat et son expiration.

Oui. Tous les crédits achetés (y compris les soldes fractionnaires) sont valables 12 mois à compter de l'achat. Les crédits inutilisés expirent automatiquement et sont définitivement supprimés à la fin de la période de validité. Les crédits expirés ne peuvent être restaurés ni convertis en espèces ou autre valeur. Règle transitoire : les crédits achetés avant le 22 sept. 2025 sont traités comme achetés le 22 sept. 2025 et expirent le 22 sept. 2026 (sauf si une expiration antérieure a été indiquée lors de l'achat).

Oui—dans leur période de validité. Les crédits inutilisés restent disponibles et sont reportés de mois en mois jusqu'à leur expiration 12 mois après l'achat.

Les crédits sont non remboursables. N'achetez que ce dont vous avez besoin—vous pouvez toujours recharger plus tard. Si une erreur de plateforme cause un échec de facturation, nous pouvons restaurer les crédits affectés après enquête. Pas de remboursement en espèces.

Les prix sont fixés en crédits, pas en dollars. Chaque endpoint a son propre coût—voir le badge « Crédits / requête » ci-dessus. Vous saurez toujours exactement ce que vous dépensez.
← Retour aux APIs