Clean city datafrom every sign-up
Users find their city after a few letters and pick it from a list. Every user of a city ends up in the same record, so your reports and filters add up.
30,000 requests a month free, with commercial use. No card needed.
Autocomplete
/v1/cities/autocomplete curl "https://api.onde.earth/v1/cities/autocomplete?q=kyoto" \
-H "Authorization: Bearer $ONDE_KEY" const url = 'https://api.onde.earth/v1/cities/autocomplete'
const query = new URLSearchParams({ q: 'kyoto', key: 'onde_pk_...' })
const response = await fetch(`${url}?${query}`)
const { data } = await response.json() const url = 'https://api.onde.earth/v1/cities/autocomplete'
const query = new URLSearchParams({ q: 'kyoto' })
const response = await fetch(`${url}?${query}`, {
headers: { Authorization: `Bearer ${process.env.ONDE_KEY}` }
})
const { data } = await response.json() import os
import requests
response = requests.get(
"https://api.onde.earth/v1/cities/autocomplete",
params={"q": "kyoto"},
headers={"Authorization": f"Bearer {os.environ['ONDE_KEY']}"},
)
data = response.json()["data"] {
"data": [
{
"id": "city_39sy1dm2dj",
"name": "Kyoto",
"localName": "京都市",
"type": "city",
"parentCityId": null,
"country": {
"code": "JP",
"name": "Japan"
},
"region": {
"id": "region_yjwfrtj0fe",
"isoCode": "JP-26",
"name": "Kyoto"
},
"coordinates": {
"latitude": 35.02107,
"longitude": 135.75385
},
"population": 1463723,
"timeZone": "Asia/Tokyo",
"isCapital": false,
"disputed": false,
"match": "exact"
}
],
"meta": {
"dataset": "2026-11-17"
}
} A city field that works everywhere
-
Any language
Users type the name they know.
-
Safe in the browser
Your key works only on your own domains.
-
Yours to keep
Store every result, even after you leave.
Add city suggestions to your sign-up form
- No card needed
- 30,000 requests a month free
- Commercial use on the Free plan