장소 검색 API — 지오코딩 & 장소 검색 | YEB

빠른 접두사 매칭, 지리적 필터 및 풍부한 OSM 메타데이터로 이름 또는 좌표로 도시, 마을 및 장소를 검색합니다. 자동 완성, 지오펜싱 및 데이터 강화에 최적.

무엇을 할 수 있나요?
즉시 자동 완성

오타 허용 접두사 검색으로 빠르게 결과를 얻으세요.

정밀한 지오펜싱

도시, 경계 상자 또는 반경으로 검색합니다.

풍부한 장소 메타데이터

OSM 식별자, 인구, 표시 이름 등을 반환합니다.

라이브 테스트
99.9 % 가동 시간
93.7ms 응답
20 req/s
0.009 크레딧 / 요청

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
}

응답 코드

코드설명
200 Success요청 처리 완료.
400 Bad Request입력 유효성 검사 실패.
401 UnauthorizedAPI 키 누락 또는 오류.
403 Forbidden키 비활성 또는 허용되지 않음.
429 Rate Limit요청이 너무 많습니다.
500 Server Error예기치 않은 오류.

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
}

응답 코드

코드설명
200 Success요청 처리 완료.
400 Bad Request입력 유효성 검사 실패.
401 UnauthorizedAPI 키 누락 또는 오류.
403 Forbidden키 비활성 또는 허용되지 않음.
429 Rate Limit요청이 너무 많습니다.
500 Server Error예기치 않은 오류.

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 — 지오코딩 & 장소 검색 | YEB — Practical Guide

A hands-on guide to searching places by name or coordinates using 장소 검색 API — 지오코딩 & 장소 검색 | YEB: 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.

자주 묻는 질문

글로벌 OSM 데이터의 도시와 마을.

네, 3자 이상의 쿼리에 대해 전문 검색 및 오타 허용 접두사 검색이 사용됩니다.

예. 오류가 발생한 요청을 포함하여 모든 요청은 크레딧을 소비합니다. 크레딧은 성공 또는 실패와 관계없이 요청 수에 연결됩니다. 오류가 당사 플랫폼 문제로 인한 것이 분명한 경우 영향을 받은 크레딧을 복원합니다(현금 환불 없음).

[email protected]로 문의하세요. 피드백을 진지하게 받아들입니다—버그 리포트나 기능 요청이 의미 있는 경우 API를 빠르게 수정하거나 개선하고 감사의 표시로 50 무료 크레딧을 제공합니다.

API와 때로는 엔드포인트에 따라 다릅니다. 일부 엔드포인트는 외부 소스의 데이터를 사용하며 더 엄격한 제한이 있을 수 있습니다. 남용을 방지하고 플랫폼 안정성을 유지하기 위해 제한도 적용합니다. 각 엔드포인트의 구체적인 제한은 문서를 확인하세요.

크레딧 시스템으로 운영됩니다. 크레딧은 API 호출과 도구에 사용하는 선불, 환불 불가 단위입니다. 크레딧은 FIFO(오래된 것부터) 방식으로 소비되며 구매일로부터 12개월간 유효합니다. 대시보드에 각 구매 날짜와 만료일이 표시됩니다.

예. 구매한 모든 크레딧(소수 잔액 포함)은 구매일로부터 12개월간 유효합니다. 미사용 크레딧은 유효 기간 종료 시 자동으로 만료되어 영구 삭제됩니다. 만료된 크레딧은 복원하거나 현금 또는 기타 가치로 전환할 수 없습니다. 경과 규칙: 2025년 9월 22일 이전에 구매한 크레딧은 2025년 9월 22일에 구매한 것으로 처리되어 2026년 9월 22일에 만료됩니다(구매 시 더 이른 만료일이 명시되지 않은 한).

예—유효 기간 내에서 이월됩니다. 미사용 크레딧은 계속 사용 가능하며 구매 후 12개월 만료까지 매월 이월됩니다.

크레딧은 환불 불가입니다. 필요한 만큼만 구매하세요—나중에 언제든 충전할 수 있습니다. 플랫폼 오류로 인해 청구가 실패한 경우 조사 후 영향을 받은 크레딧을 복원할 수 있습니다. 현금 환불 없음.

가격은 달러가 아닌 크레딧으로 설정됩니다. 각 엔드포인트에는 자체 비용이 있습니다—위의 "크레딧 / 요청" 배지를 참조하세요. 항상 정확한 지출 금액을 알 수 있습니다.
← API로 돌아가기