Property
The core entity of the Stream Estate API
A Property represents a unique real-estate asset, aggregated from one or more sources. It groups the set of listings (published ads) referencing it.
Aggregation & deduplication
A property groups several listings (ads) crawled from different sources. The response aggregates them into a canonical property view, deduplicates publishers into publishers[] (grouped by id), and keeps per-listing variants in listings[] — each carrying its source.
propertyaggregated canonical viewpublishers[]→ pub X, pub Y (2 distinct)dedupedlistings[]per-listing variants — each carries its sourceOne property can therefore carry several listings and several publishers: a flat advertised by two agencies, or by one agency on two portals, yields a single Property, one Listing per source ad (with its URL, dates, and any price or area deviation) and one Publisher per distinct advertiser. This is not a duplicate: the asset is the same, the ads differ.
Two representations
The API returns a property in JSON:API format by default, or "flat" with the Accept: application/json header. The same property in both formats, on GET /properties/{id}:
The consolidated view sits under data.attributes. data.relationships.listings and data.relationships.publishers only hold references (type + id); the full Listing, Publisher and Source objects live in the top-level included array, with one PropertyPublisher per publisher for its mandate, reference and contact on this property.
{
"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": { "…": "…" } } }
]
}Details, mapping table and resolution snippet: Response format.
Schema
Flat format (Accept: application/json), PropertySearchResult:
| Field | Type | Description |
|---|---|---|
id | string (UUID) | Public stable identifier of the property |
property | object | Aggregated canonical view (PropertySection): createdAt, updatedAt, expired, propertyType, constructionStatus, transaction, area, unit, building, amenities, body, pricing, location, pictures, changes |
publishers | array | Publishers deduplicated across all listings (PublisherSection[]) |
listings | array | Per-listing entries (ListingSection[]), with only the variants that diverge from the canonical view |
Canonical details (area, rooms, type, transaction, etc.) live under property. listings[] only carries variants specific to each ad (title, URL, publisher, publication dates, and any field that diverges from the canonical view).
Endpoints
POST /properties— search via acriteriatree (see Filtering). Each result is a complete property, identical to theGET /properties/{id}response.GET /properties/{id}— a property whose id you already know. No need to call it to complete a search result.
See also
- Response format — JSON:API (
relationships/included) or flat JSON viaAccept