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.
propertyvue canonique agrégéepublishers[]→ pub X, pub Y (2 distincts)dédoublonnélistings[]variantes par annonce — chacune porte sa sourceUne 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 :
| Champ | Type | Description |
|---|---|---|
id | string (UUID) | Identifiant public stable de la property |
property | object | Vue canonique agrégée (PropertySection) : createdAt, updatedAt, expired, propertyType, constructionStatus, transaction, area, unit, building, amenities, body, pricing, location, pictures, changes |
publishers | array | Publishers dédoublonnés sur l'ensemble des listings (PublisherSection[]) |
listings | array | Entré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 arbrecriteria(voir Filtrage). Chaque résultat est une property complète, identique à la réponse deGET /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
- Format de réponse — JSON:API (
relationships/included) ou JSON à plat viaAccept