Search cities
GET/v1/geo/cities
scope catalog.read
Cursor-paginated and always filtered — the table holds 727k rows, so an unfiltered request is refused. Search covers both the local script and the latin form: q=Sofia finds София.
Query parameters#
| Name | Example | |
|---|---|---|
country | RO | ISO country code |
county_id | — | Restrict to one county |
q | craio | Name prefix, either script |
limit | 50 | Max 100 |
cursor | — | next_cursor from the previous page |
Response#
| Field | Type | Description |
|---|---|---|
count | integer | How many cities in this page — not the total. |
next_cursor | string|null | Pass back as ?cursor= for the next page. null means this was the last one. Romania alone has thousands of cities, so always follow the cursor rather than assuming one page. |
data | array | The cities matching your filters. |
data[]. | integer | What you send as city_id on an address or pickup point. Free-text city names are never accepted — the courier needs this id. |
data[]. | string | Name in local script. |
data[]. | string | Latin transliteration, for display. |
data[]. | object | The county it sits in. |
data[]. | integer | County id. |
data[]. | string | County name. |
data[]. | string | County code. |
data[]. | number | Latitude, for map display. |
data[]. | number | Longitude, for map display. |
data[]. | boolean | Whether it is the country capital. |
Example
{
"count": 1,
"next_cursor": null,
"data": [
{
"id": 1,
"name": "Craiova",
"latin_name": "Craiova",
"county": {
"id": 1,
"name": "Dolj",
"code": "DJ"
},
"latitude": 44.33,
"longitude": 23.82,
"is_capital": false
}
]
}