Stream EstateStream Estate
Concepts

Property

L'entité centrale de l'API Stream Estate

Une Property représente un bien immobilier unique, agrégé depuis une ou plusieurs sources. Elle regroupe l'ensemble des listings (annonces publiées) qui la référencent.

Agrégation et déduplication

Une property regroupe plusieurs listings (annonces) crawlés sur différentes sources. La réponse les agrège en une vue canonique property, dédoublonne les publishers dans publishers[] (groupés par id), et conserve les variantes par annonce dans listings[] — chacune portant sa source.

annonces brutes · multi-sources
Listing
src Apub X
Listing
src Bpub Y
Listing
src Cpub X
agrège + dédoublonne
Property
propertyvue canonique agrégée
publishers[]→ pub X, pub Y (2 distincts)dédoublonné
listings[]variantes par annonce — chacune porte sa source

Une même property peut donc porter plusieurs listings et plusieurs publishers : un appartement publié par deux agences, ou par une agence sur deux portails, donne un seul Property, un Listing par annonce source (avec son URL, ses dates, ses écarts de prix ou de surface) et un Publisher par annonceur distinct. Ce n'est pas un doublon : le bien est le même, les annonces sont différentes.

Deux représentations

L'API renvoie une property au format JSON:API par défaut, ou « à plat » avec l'en-tête Accept: application/json. Même property dans les deux formats, sur GET /properties/{id} :

La vue consolidée est dans data.attributes. data.relationships.listings et data.relationships.publishers ne contiennent que des références (type + id) ; les objets complets Listing, Publisher et Source sont dans included, au premier niveau de la réponse, avec un PropertyPublisher par annonceur pour son mandat, sa référence et son contact sur ce bien.

{
  "data": {
    "type": "Property",
    "id": "019fe5b2-001f-78c9-8ed3-968ddffbb712",
    "attributes": { "propertyType": "FLAT", "…": "…" },
    "relationships": {
      "listings":   { "data": [ { "type": "Listing",   "id": "019fe5b1-c448-7b00-a993-feacc6966090" } ] },
      "publishers": { "data": [ { "type": "Publisher", "id": "019eff3c-28d9-7c10-8a44-9f2f00329980" } ] },
      "propertyPublishers": { "data": [ { "type": "PropertyPublisher", "id": "5b1f7c2e-8a41-5d3b-9c6e-2f4a1b7d9e01" } ] }
    }
  },
  "included": [
    { "type": "Listing",   "id": "019fe5b1-c448-7b00-a993-feacc6966090", "attributes": { "url": "…", "…": "…" } },
    { "type": "Publisher", "id": "019eff3c-28d9-7c10-8a44-9f2f00329980", "attributes": { "agencyName": "…", "…": "…" } },
    { "type": "PropertyPublisher", "id": "5b1f7c2e-8a41-5d3b-9c6e-2f4a1b7d9e01", "attributes": { "mandate": "EXCLUSIVE", "reference": "…", "contact": { "…": "…" } } }
  ]
}

Détails, tableau de correspondance et snippet de résolution : Format de réponse.

Schéma

Format à plat (Accept: application/json), PropertySearchResult :

ChampTypeDescription
idstring (UUID)Identifiant public stable de la property
propertyobjectVue canonique agrégée (PropertySection) : createdAt, updatedAt, expired, propertyType, constructionStatus, transaction, area, unit, building, amenities, body, pricing, location, pictures, changes
publishersarrayPublishers dédoublonnés sur l'ensemble des listings (PublisherSection[])
listingsarrayEntrées par listing (ListingSection[]), avec uniquement les variantes qui diffèrent de la vue canonique

Les détails canoniques (surface, rooms, type, transaction, etc.) se trouvent dans property. listings[] ne contient que les variantes spécifiques à chaque annonce (titre, URL, publisher, dates de publication et tout champ qui s'écarte du canonique).

Endpoints

  • POST /properties — recherche via un arbre criteria (voir Filtrage). Chaque résultat est une property complète, identique à la réponse de GET /properties/{id}.
  • GET /properties/{id} — une property dont vous connaissez déjà l'identifiant. Pas besoin de l'appeler pour compléter un résultat de recherche.

Voir aussi

Version 0.14.289Dernière mise à jour

Sur cette page