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

Real estate POI API
Why portals and CRMs use this endpoint, with the categories and use cases. Read more on yatmo.com.

See this data in a property listing