Summary endpoint

Get neighbourhood intelligence for a coordinate — nearest POIs grouped by category, closest cities, and travel times. The single most useful endpoint for real-estate use cases.

GET https://{country}.yatmo.com/summary LicenseKey header

Cached server-side for 7 days per (lat, lng, language).

Request

Required parameters

Name In Type Description
latitude required query double Latitude in decimal degrees. Must be inside the country’s borders.
longitude required query double Longitude in decimal degrees. Must be inside the country’s borders.
language required query string ISO 639-1 code (EN, FR, NL, DE, IT, ES, PT, CA). Falls back to EN if unsupported for the country.

Examples

curl -H 'LicenseKey: YOUR_KEY' \
  'https://be.yatmo.com/summary?latitude=50.8520525&longitude=4.3442926&language=EN'
const res = await fetch(
  'https://be.yatmo.com/summary?latitude=50.8520525&longitude=4.3442926&language=EN',
  { headers: { LicenseKey: 'YOUR_KEY' } }
);
const summary = await res.json();
console.log(summary.CloseCities);
$ch = curl_init('https://be.yatmo.com/summary?latitude=50.8520525&longitude=4.3442926&language=EN');
curl_setopt($ch, CURLOPT_HTTPHEADER, ['LicenseKey: YOUR_KEY']);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$body = curl_exec($ch);
curl_close($ch);
$summary = json_decode($body, true);
using var http = new HttpClient();
http.DefaultRequestHeaders.Add("LicenseKey", "YOUR_KEY");
var url = "https://be.yatmo.com/summary?latitude=50.8520525&longitude=4.3442926&language=EN";
var json = await http.GetStringAsync(url);
// Deserialize into your own DTO matching CustomerItemSummary

Response shape

The response is a CustomerItemSummary object. The most important fields:

Name In Type Description
AvailableCategoriesAroundPosition array POI categories ranked by proximity, each with subcategories and the closest 1-N POIs.
CloseCities array Nearest major cities with travel time + distance.
PlaceInformation object? Street, city, zip when Yatmo can resolve the address; null otherwise.

Each POI nested in AvailableCategoriesAroundPosition[*].SubCategories[*].Data[*] carries a TravelDataElements array with one entry per travel mode (driving, walking, cycling, transit) — each with both raw values (PreciseTravelDistanceData in meters, TravelTime in seconds) and pre-formatted labels (PreciseTravelDistanceLongLabel, TravelTimeShortLabel, etc.) in the requested language.

Compact field names
Some leaf fields use 2-3 letter names to keep the payload small (n = name, la/lo = lat/lng, td = TravelDataElements, etc.). The example response above shows the full mapping.

Narrative text variants

Alongside the raw structured payload above, two sibling endpoints return ready-to-publish neighbourhood paragraphs — the same human-readable text that powers the Summary-text plugin. Use these when you want descriptive copy for a listing page rather than wiring up the structured fields yourself.

Text only — GET /summary/text

GET https://{country}.yatmo.com/summary/text LicenseKey header

Multilingual neighbourhood paragraphs. Cached server-side for 7 days per (lat, lng).

Name In Type Description
latitude required query double Latitude in decimal degrees. Must be inside the country’s borders.
longitude required query double Longitude in decimal degrees. Must be inside the country’s borders.

Note there is no language parameter: a single call returns every paragraph in all languages supported for that country (for France: FR, EN, PT, DE, ZH), so you can cache one response and render any locale. The body is a MultiLanguagesText object — an ordered list of Paragraphs, each with an IconId (e.g. transport, school), and language-keyed maps for the text.

Each paragraph carries up to three heading variants at increasing geographic scope: Title is the bare category (e.g. Transports), TitleBis qualifies it with the immediate area (Transports around Cours Vitton), and TitleTer qualifies it with the city (Transports in Lyon). Only Title is always present; TitleBis and TitleTer are omitted when not available. Below the headings come an array of language-keyed Sentences and an optional language-keyed bullet List.

{
  "Paragraphs": [
    {
      "IconId":   "transport",
      "Title":    { "FR": "Transports", "EN": "Transports", "PT": "Transportes", "DE": "Transporte", "ZH": "交通工具" },
      "TitleBis": { "FR": "Transports autour de la Cours Vitton", "EN": "Transports around Cours Vitton", "PT": "Transporte perto de Cours Vitton", "DE": "Transporte in der Nähe von Cours Vitton", "ZH": "Cours Vitton 周围的交通工具" },
      "TitleTer": { "FR": "Transports à Lyon", "EN": "Transports in Lyon", "PT": "Transportes no Lyon", "DE": "Transporte in Lyon", "ZH": "Lyon 的交通工具" },
      "Sentences": [
        { "FR": "Ce bien profite d’un cadre de vie connecté aux transports du quartier …", "EN": "This property enjoys a setting well connected to the area’s transport …" }
      ],
      "List": []
    },
    {
      "IconId": "school",
      "Title":  { "FR": "Écoles", "EN": "Schools" },
      "Sentences": [ { "FR": "…", "EN": "…" } ],
      "List": [ { "FR": "Groupe scolaire … — 320 m", "EN": "…" } ]
    }
  ]
}

The example above is shown decoded for readability. On the wire, values are serialised with non-ASCII escaping: every accented or non-Latin character is emitted as a \uXXXX escape — à\u00e0, \u2026, the curly apostrophe \u2019, and CJK such as 交通工具\u4ea4\u901a\u5de5\u5177. Any standard JSON parser turns the escapes back into these characters, so no special handling is needed. The Sentences and List maps above are abridged to FR/EN for brevity; a live response repeats every one of the country’s language keys in each map, exactly as the three Title maps show.

Text and data — GET /summary/text-and-data

GET https://{country}.yatmo.com/summary/text-and-data LicenseKey header

Structured summary + narrative paragraphs in one call. Cached server-side for 7 days per (lat, lng, language).

Name In Type Description
latitude required query double Latitude in decimal degrees. Must be inside the country’s borders.
longitude required query double Longitude in decimal degrees. Must be inside the country’s borders.
language required query string ISO 639-1 code (EN, FR, NL, DE, IT, ES, PT, CA). Localises the Data block; the Text block always carries every supported language.

The response wraps both payloads under two top-level keys: Data is the exact same CustomerItemSummary object as GET /summary (see Response shape above), localised to the requested language; and Text is the identical MultiLanguagesText structure returned by /summary/text. One round-trip when you want both the machine-readable fields and the prose.

{
  "Data": { "AvailableCategoriesAroundPosition": [ "…" ], "CloseCities": [ "…" ], "PlaceInformation": { "…": "…" } },
  "Text": { "Paragraphs": [ "…" ] }
}

Notes