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 | query | boolean |
Optional, defaults to false. When true, POIs sharing a coordinate collapse into one entry: on a dense city block this typically cuts the array by about half.
|
Optional parameters
| Name | In | Type | Description |
|---|---|---|---|
| poiTypesIds | query | string |
Comma-separated place-type ids, taken from /simplifiedcategories for the same market. An id ending in 000001 means every variant of that type. 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.8440,4.3482&bound2=50.8494,4.3568&language=EN&groupSamePositions=true&poiTypesIds=10030001000001'
const url = new URL('https://be.yatmo.com/points');
url.searchParams.set('bound1', '50.8440,4.3482'); // south-west corner, latitude,longitude
url.searchParams.set('bound2', '50.8494,4.3568'); // north-east corner
url.searchParams.set('language', 'EN');
url.searchParams.set('groupSamePositions', 'true');
url.searchParams.set('poiTypesIds', '10030001000001'); // supermarkets, from /simplifiedcategories (BE)
const res = await fetch(url, { headers: { LicenseKey: 'YOUR_KEY' } });
const points = await res.json();
$params = http_build_query([
'bound1' => '50.8440,4.3482',
'bound2' => '50.8494,4.3568',
'language' => 'EN',
'groupSamePositions' => 'true',
'poiTypesIds' => '10030001000001',
]);
$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.8440,4.3482&bound2=50.8494,4.3568&language=EN&groupSamePositions=true&poiTypesIds=10030001000001";
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. | |
| t | string |
Type label, already translated into the requested language (e.g. Supermarket, Bus stop (De Brouckere)). This is the field to display: no lookup needed.
|
|
| la | double | Latitude. | |
| ln | double | Longitude. | |
| p | string |
POI type ID, read as <category 4><subcategory 4><variant 6>. The variant identifies the transit line or the retail brand, so several places share one id. Use /simplifiedcategories for the ids you can pass to poiTypesIds.
|
|
| 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. | |
| rpt | string | Repetition marker used when several entries describe the same physical place. | |
| 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). - Filtering. Call /simplifiedcategories for the ids to pass in
poiTypesIds. Ids ending in000001mean “every variant of this subcategory”:10030001000001returns supermarkets only,10020003000001bus stops only.
Real estate POI API
Why portals and CRMs use this endpoint, with the categories and use cases. Read more on yatmo.com.