Stream EstateStream Estate

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.

Subscribe to the RSS feed
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

  • included can hold a fourth type, PropertyPublisher: a client that accepts only Listing, Publisher and Source must accept or ignore it. See Resource types.

Added

  • PropertyPublisher, referenced by relationships.propertyPublishers: a publisher's mandate, reference and contact on this property. See Response format.

Fixed

  • A Publisher with 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, from EXACT to NONE. 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

  • enabled on a rule is tolerated until 2026-10-20: false drops the rule, true is ignored. After that, the field is refused with 400. 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_LISTING no longer exists, in rules or in webhooks. A rule sending it gets a 400. To be told about every new listing on a property you already follow, use NEW_MATCH with scope: LISTING. See Alert and Webhooks.
  • variationPercent is now a list of ranges: [{ "gte": …, "lte": … }]. A bare object gets a 400. See the variation range.
  • One rule per eventType. A duplicate gets a 422. See Alert.

Changed

  • PRICE_CHANGE and OTHER_CHANGE now trigger notifications. scope and variationPercent are 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.url on POST /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 the url field 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, thresholdDirection and enabled are gone from rules: use the signed variationPercent range list ([{ "lte": -5 }] for a drop of at least 5%). See the variation range.

Added

  • scope on each rule — PROPERTY (default) or LISTING, 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_2006 or FR_DPE_2021, absent when the source did not state it; country-prefixed list, set to grow. See the reference.
  • unit.diagnostic.methodVersion and unit.diagnostic.reference — data-model revision and certificate number at the issuing registry. See the reference.
  • property.unit.diagnostic.standard filter on POST /properties, with in / nin / inOrMissing, usable in an alert's criteria. See Filtering — energy certificate standard.
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 omitting criteria.
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 title and annotations in the tools/list response. 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 /properties results and alerts by default — listings.priceCoherent is implicitly true, 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 — true reproduces the default behaviour, false returns only properties whose listings are all incoherent. Judged at the property level, unlike the other listings filters. 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 SUSPENDED destination is probed automatically (every 5 minutes, then at a growing interval up to 6 h) and flips back to ACTIVE as 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-KEY authentication). Lets an AI assistant query the API in natural language — see the MCP guide.
  • byChannel breakdown in GET /account/api-usage to separate DIRECT calls from those made through MCP.
HMAC-signed webhooksWebhooksCopy link to this entry

Added

  • Webhook signing via X-Webhook-Signature: sha256=... and X-Webhook-Timestamp headers 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.0 on every outbound request.

Changed

  • Webhook destinations created before this release obtain their key by rotating it once from the console.
Version 0.14.289Last updated