Changelog
Versions, breaking changes, and new features of the Stream Estate API
The v2 API changes that may impact your integration, newest first.
The v2 API is in Beta: breaking changes, notably to syntax, remain possible. They are recorded here.
Count the results of a searchAPICopy link to this entry
A property search can return the result count alone, without any property.
Added
size: 0onPOST /properties— the response carries no property, only the number of matching properties inmeta.totalItems(JSON:API format); previously,sizestarted at 1. See Pagination and the reference.
Publisher mandate, reference and contact in JSON:APIAPICopy link to this entry
In JSON:API, each property now gives the mandate, reference and contact of its publishers, as flat JSON does.
Changed
includedcan hold a fourth type,PropertyPublisher: a client that accepts onlyListing,PublisherandSourcemust accept or ignore it. See Resource types.
Added
PropertyPublisher, referenced byrelationships.propertyPublishers: a publisher'smandate,referenceandcontacton this property. See Response format.
Fixed
- A
Publisherwith no field set returns"attributes": {}instead of[], as the format requires.
Address resolution: version 2APICopy link to this entry
Address resolution improves: matches are more reliable, and we will keep refining them during the beta.
Added
algorithmVersion— the version of the logic that produced the answer. An answer may change from one version to the next. Each new version is announced here. See the reference.
Property address resolution (beta)APICopy link to this entry
Get the postal address of a given property.
Added
POST /properties/{id}/resolve-address— the property's address and its confidence level, fromEXACTtoNONE. In beta. See the reference.
Temporary tolerance of the enabled rule fieldDeprecatedAPICopy link to this entry
A rule still carrying the former enabled field is no longer refused. You have until 2026-10-20 to remove it.
Deprecated
enabledon a rule is tolerated until 2026-10-20:falsedrops the rule,trueis ignored. After that, the field is refused with400. To stop receiving an event, remove its rule. See Alert.
Rule granularity and variation rangesBreakingAPIWebhooksCopy link to this entry
A rule picks its granularity with scope. A PRICE_CHANGE rule accepts several price variation ranges. Price and attribute changes now trigger notifications.
Breaking
ADDITIONAL_LISTINGno longer exists, in rules or in webhooks. A rule sending it gets a400. To be told about every new listing on a property you already follow, useNEW_MATCHwithscope: LISTING. See Alert and Webhooks.variationPercentis now a list of ranges:[{ "gte": …, "lte": … }]. A bare object gets a400. See the variation range.- One rule per
eventType. A duplicate gets a422. See Alert.
Changed
PRICE_CHANGEandOTHER_CHANGEnow trigger notifications.scopeandvariationPercentare taken into account. See Alert.
Search by listing URLAPICopy link to this entry
Finding a property from a listing's URL no longer depends on the trailing slash.
Fixed
listings.urlonPOST /properties— the URL is matched with or without a trailing slash; previously, the form that differed from the one the site publishes returned no result. Nothing to change on your side, and theurlfield in responses is unchanged. See the reference.
Alert notification rulesBreakingAPIWebhooksCopy link to this entry
notificationConfig rules adopt a new vocabulary; the old names are rejected, with no cohabitation window.
Breaking
eventType:PRICE_CHANGED→PRICE_CHANGE,ANY_ATTRIBUTE_CHANGED→OTHER_CHANGE,LISTING_EXPIRED→EXPIRED,LISTING_REACTIVATED→REACTIVATED, in rules and in the webhooks you receive. See Alert and Webhooks.thresholdPercentage,thresholdMinPercentage,thresholdMaxPercentage,thresholdDirectionandenabledare gone from rules: use the signedvariationPercentrange list ([{ "lte": -5 }]for a drop of at least 5%). See the variation range.
Added
scopeon each rule —PROPERTY(default) orLISTING, the granularity of the notification. See Alert.
Energy certificate standardAPICopy link to this entry
A property's unit.diagnostic block gains three fields, among them the certificate's regulatory standard, and that standard becomes filterable.
Added
unit.diagnostic.standard—FR_DPE_2006orFR_DPE_2021, absent when the source did not state it; country-prefixed list, set to grow. See the reference.unit.diagnostic.methodVersionandunit.diagnostic.reference— data-model revision and certificate number at the issuing registry. See the reference.property.unit.diagnostic.standardfilter onPOST /properties, within/nin/inOrMissing, usable in an alert'scriteria. See Filtering — energy certificate standard.
Phrase search in listing textBreakingAPICopy link to this entry
Text filters become phrases: adding a word narrows the result instead of widening it, and a phrase can now be excluded.
Breaking
property.body.titleandproperty.body.descriptionno longer accept a string: send{ "in": [...], "nin": [...] }, every entry being a phrase — a bare string returns a400. For a result identical to the former"a b", send{ "in": ["a", "b"] }; no cohabitation window, the API being in private beta. See Filtering — Text search.
Added
property.body.<field>.in— at least one of the phrases, words side by side and in order, case and accents ignored; up to 25 per list. See the reference.property.body.<field>.nin— none of the phrases. See Filtering — Text search.
Partial alert updatesAPICopy link to this entry
PUT /alerts/{uuid} now changes only the fields the body names, like every other update on the API.
Changed
- A field omitted from the body of
PUT /alerts/{uuid}keeps its stored value; it used to be reset to its create-time default. See Alerts — updating an alert. - To clear a field, send it as
null. In particular, an alert widens to every property with"criteria": null, no longer by omittingcriteria.
MCP tool annotationsMCPCopy link to this entry
The MCP server's tools now declare their behaviour per the MCP specification: a human-readable title and the readOnlyHint, destructiveHint, idempotentHint and openWorldHint hints, as the Claude connectors directory requires.
Changed
- Read-only tools (
search_properties,resolve_location,list_alerts) run without a confirmation prompt in assistants that honour these hints, Claude included; creating, updating and deleting an alert still ask for confirmation. See What the assistant can do.
Added
- Every tool exposes
titleandannotationsin thetools/listresponse. See the MCP guide.
Price coherenceAPICopy link to this entry
Every listing now carries a price-coherence verdict, computed by comparing its price per m² to the local market median. The verdict is conservative: when in doubt, the property stays visible.
Changed
- Properties whose listings all carry an incoherent price are hidden from
POST /propertiesresults and alerts by default —listings.priceCoherentis implicitlytrue, and properties with an undetermined verdict stay visible. See Filtering — default masks. - The filterable price fields of a property (
property.pricing.displayed,property.pricing.pricePerArea, price variations) are computed without its price-incoherent listings.
Added
listings.priceCoherent—truereproduces the default behaviour,falsereturns only properties whose listings are all incoherent. Judged at the property level, unlike the otherlistingsfilters. See the reference.
Automatic recovery of suspended webhooksWebhooksCopy link to this entry
A webhook destination tripped by the circuit breaker no longer needs a manual reactivation to resume deliveries.
Changed
- A
SUSPENDEDdestination is probed automatically (every 5 minutes, then at a growing interval up to 6 h) and flips back toACTIVEas soon as your endpoint answers, with a progressive replay of the suspended notifications; the console remains available to force recovery. See Notifications — circuit breaker. - At most 5,000 notifications are kept per suspended destination; beyond that, events stay visible but are no longer replayed. See Notifications — circuit breaker.
MCP serverMCPCopy link to this entry
Added
- MCP server at
https://api-v2.stream.estate/mcp(HTTP transport,X-API-KEYauthentication). Lets an AI assistant query the API in natural language — see the MCP guide. byChannelbreakdown inGET /account/api-usageto separateDIRECTcalls from those made throughMCP.
HMAC-signed webhooksWebhooksCopy link to this entry
Added
- Webhook signing via
X-Webhook-Signature: sha256=...andX-Webhook-Timestampheaders for replay protection. Full details in the webhooks guide. - Signing-key rotation from the console (console.stream.estate/webhooks) without dropping in-flight deliveries — see the webhooks guide.
User-Agent: StreamEstate-Webhook/1.0on every outbound request.
Changed
- Webhook destinations created before this release obtain their key by rotating it once from the console.