Points endpoint
Fetch all points of interest inside a geographic bounding box, optionally filtered by category. Use this to populate a custom map.
GET
https://{country}.yatmo.com/points
LicenseKey header
Request
Required parameters
| Name | In | Type | Description |
|---|---|---|---|
| bound1 required | query | string |
First bounding-box corner as "latitude,longitude" (e.g. 50.83,4.31).
|
| bound2 required | query | string | Opposite corner as "latitude,longitude". |
| language required | query | string | ISO 639-1 code. Falls back to EN if unsupported. |
| groupSamePositions required | query | boolean | If true, collapse multiple POIs at the same coordinate into a single entry. |
Optional parameters
| Name | In | Type | Description |
|---|---|---|---|
| poiTypesIds | query | string | Comma-separated POI type IDs (from /categories). Omit to get all types. |
| caringForBigResponse | query | boolean |
If true, reject bounding boxes too large to compute. Set to false only if you really need a wide area.
Default: true. |
| summaryMode | query | boolean |
If true, return a sampled subset (one per category) suitable for an overview map; otherwise return up to 200 closest.
Default: false. |
Examples
curl -H 'LicenseKey: YOUR_KEY' \
'https://be.yatmo.com/points?bound1=50.83,4.31&bound2=50.86,4.40&language=EN&groupSamePositions=true&poiTypesIds=1,2,3'
const url = new URL('https://be.yatmo.com/points');
url.searchParams.set('bound1', '50.83,4.31');
url.searchParams.set('bound2', '50.86,4.40');
url.searchParams.set('language', 'EN');
url.searchParams.set('groupSamePositions', 'true');
url.searchParams.set('poiTypesIds', '1,2,3');
const res = await fetch(url, { headers: { LicenseKey: 'YOUR_KEY' } });
const points = await res.json();
$params = http_build_query([
'bound1' => '50.83,4.31',
'bound2' => '50.86,4.40',
'language' => 'EN',
'groupSamePositions' => 'true',
'poiTypesIds' => '1,2,3',
]);
$ch = curl_init("https://be.yatmo.com/points?$params");
curl_setopt($ch, CURLOPT_HTTPHEADER, ['LicenseKey: YOUR_KEY']);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$points = json_decode(curl_exec($ch), true);
curl_close($ch);
using var http = new HttpClient();
http.DefaultRequestHeaders.Add("LicenseKey", "YOUR_KEY");
var qs = "bound1=50.83,4.31&bound2=50.86,4.40&language=EN&groupSamePositions=true&poiTypesIds=1,2,3";
var json = await http.GetStringAsync($"https://be.yatmo.com/points?{qs}");
Response shape
An array of compact POI objects. Field names are intentionally short (the payload can be large):
| Name | In | Type | Description |
|---|---|---|---|
| n | string | POI name. | |
| la | double | Latitude. | |
| ln | double | Longitude. | |
| p | string | POI type ID (matches the ids returned by /categories). | |
| i | string | Icon index for rendering. | |
| si | string | Sub-icon index (variant; nullable). | |
| sd | string? | Specific data (e.g. IATA code for airports). Nullable. | |
| fid | string? | Filter ID for category grouping. | |
| g | boolean |
True if this row represents multiple grouped POIs (when groupSamePositions=true).
|
Notes
- Result cap. Up to 200 POIs per call (unless
summaryMode=true, which returns far fewer). Check theNzresponse header:truemeans “result truncated, client should zoom in”. - Empty box. A 200 response with an empty array means “no POIs here” — not an error.
- Too-large boxes return 400 with the message
The requested area is too large.Either narrow the box or passcaringForBigResponse=false(use sparingly). - Combine with /categories to discover valid
poiTypesIds.