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, ZH, HI, AR, RU, JA, EL, HR, MT, SL, SR, TR, BS, SQ, BG), or CNR (ISO 639-2/3) for Montenegrin, which has no ISO 639-1 code. 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.

Below the top level, field names are short. These are the names the API actually returns:

Name In Type Description
AvailableCategoriesAroundPosition[].ct int Category, stable across languages: 1 education, 2 transport, 3 shopping, 7 tourism.
…[].l string Category label, translated.
…[].sc[] array Sub-categories. st sub-type (numbered per market), l plural label, lb singular label (may be null), d the places.
…sc[].d[] array Places, not guaranteed to be sorted. n name, la latitude, lo longitude, id place-type id (the same ids as /simplifiedcategories, variant included), i icon, td travel data.
…d[].td[] array One entry per travel mode. tm mode, stable (1 driving, 2 walking, 3 cycling, 4 transit); ttm the same mode as a translated label; hti false when that mode has no travel information.
…td[] values int / string ptdd network distance in metres, tt time in seconds; labels in the requested language: ptdll / ptdsl distance long and short, ttll / ttsl / ttesl time long, short and extra short.
Compare numbers, display labels
Every label (l, lb, ttm, ptdsl…) is translated. Match on ct, st, id and tm; show the labels. See the bulk scoring recipe for a complete, tested example.

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

Neighbourhood content API
How portals publish this text on listing pages, and what it is for. Read more on yatmo.com.

See this text in a property listing