Changelog
Versions, changements incompatibles et nouveautés de l'API Stream Estate
Les changements de l'API v2 qui peuvent impacter votre intégration, du plus récent au plus ancien.
L'API v2 est en Beta : des changements incompatibles, notamment de syntaxe, restent possibles. Ils sont consignés ici.
Compter les résultats d'une rechercheAPICopier le lien de cette entrée
Une recherche de biens peut renvoyer uniquement le nombre de résultats, sans aucun bien.
Added
size: 0surPOST /properties— la réponse ne contient aucun bien, seulement le nombre de biens correspondants dansmeta.totalItems(format JSON:API) ; auparavant,sizecommençait à 1. Voir Pagination et la référence.
Mandat, référence et contact de l'annonceur en JSON:APIAPICopier le lien de cette entrée
En JSON:API, chaque bien donne désormais le mandat, la référence et le contact de ses annonceurs, comme le JSON à plat.
Changed
includedpeut contenir un quatrième type,PropertyPublisher: un client qui n'accepte queListing,PublisheretSourcedoit l'accepter ou l'ignorer. Voir Types de ressources.
Added
PropertyPublisher, référencée parrelationships.propertyPublishers:mandate,referenceetcontactd'un annonceur sur ce bien. Voir Format de réponse.
Fixed
- Un
Publishersans aucun champ renseigné renvoie"attributes": {}au lieu de[], comme le prévoit le format.
Résolution d'adresse : version 2APICopier le lien de cette entrée
La résolution d'adresse s'améliore : les correspondances sont plus fiables, et nous continuerons de les affiner pendant la bêta.
Added
algorithmVersion— la version de la logique qui a produit la réponse. Une réponse peut changer d'une version à l'autre. Chaque nouvelle version est annoncée ici. Voir la référence.
Résolution de l'adresse d'un bien (bêta)APICopier le lien de cette entrée
Obtenez l'adresse postale d'un bien donné.
Added
POST /properties/{id}/resolve-address— l'adresse du bien et son niveau de confiance, deEXACTàNONE. En bêta. Voir la référence.
Tolérance temporaire du champ enabled des règlesDépréciéAPICopier le lien de cette entrée
Une règle qui contient encore l'ancien champ enabled n'est plus refusée. Vous avez jusqu'au 2026-10-20 pour le retirer.
Deprecated
enabledsur une règle est toléré jusqu'au 2026-10-20 :falseretire la règle,trueest ignoré. Ensuite, le champ sera refusé en400. Pour ne plus recevoir un événement, retirez sa règle. Voir Alert.
Granularité des règles et intervalles de variationBreakingAPIWebhooksCopier le lien de cette entrée
Une règle choisit sa granularité avec scope. Une règle PRICE_CHANGE accepte plusieurs intervalles de variation de prix. Les changements de prix et d'attributs déclenchent désormais des notifications.
Breaking
ADDITIONAL_LISTINGn'existe plus, ni dans les règles ni dans les webhooks. Une règle qui l'envoie reçoit un400. Pour être prévenu de chaque nouveau listing sur une property déjà suivie, utilisezNEW_MATCHavecscope: LISTING. Voir Alert et Webhooks.variationPercentest maintenant une liste d'intervalles :[{ "gte": …, "lte": … }]. Un objet seul reçoit un400. Voir l'intervalle de variation.- Une seule règle par
eventType. Un doublon reçoit un422. Voir Alert.
Changed
PRICE_CHANGEetOTHER_CHANGEdéclenchent désormais des notifications.scopeetvariationPercentsont pris en compte. Voir Alert.
Recherche par URL d'annonceAPICopier le lien de cette entrée
Retrouver une property à partir de l'URL d'une annonce ne dépend plus du slash final.
Fixed
listings.urlsurPOST /properties— l'URL est reconnue avec ou sans slash final ; auparavant, la forme différente de celle publiée par le site ne renvoyait aucun résultat. Aucun changement à faire côté client, le champurldes réponses est inchangé. Voir la référence.
Règles de notification des alertesBreakingAPIWebhooksCopier le lien de cette entrée
Les règles de notificationConfig adoptent un nouveau vocabulaire ; les anciens noms sont rejetés, sans période de cohabitation.
Breaking
eventType:PRICE_CHANGED→PRICE_CHANGE,ANY_ATTRIBUTE_CHANGED→OTHER_CHANGE,LISTING_EXPIRED→EXPIRED,LISTING_REACTIVATED→REACTIVATED, dans les règles comme dans les webhooks reçus. Voir Alert et Webhooks.thresholdPercentage,thresholdMinPercentage,thresholdMaxPercentage,thresholdDirectionetenableddisparaissent des règles : utilisez la liste d'intervalles signésvariationPercent([{ "lte": -5 }]pour une baisse d'au moins 5 %). Voir l'intervalle de variation.
Added
scopesur chaque règle —PROPERTY(défaut) ouLISTING, la granularité de la notification. Voir Alert.
Norme du diagnostic énergétiqueAPICopier le lien de cette entrée
Le bloc unit.diagnostic d'une property gagne trois champs, dont la norme réglementaire du diagnostic, et cette norme devient filtrable.
Added
unit.diagnostic.standard—FR_DPE_2006ouFR_DPE_2021, absent quand la source ne l'indique pas ; liste préfixée par pays, appelée à s'étendre. Voir la référence.unit.diagnostic.methodVersionetunit.diagnostic.reference— révision du modèle de données et numéro du certificat au registre émetteur. Voir la référence.- Filtre
property.unit.diagnostic.standardsurPOST /properties, avecin/nin/inOrMissing, utilisable dans lecriteriad'une alerte. Voir Filtrage — norme du diagnostic énergétique.
Recherche par phrase dans les textes d'annonceBreakingAPICopier le lien de cette entrée
Les filtres texte deviennent des phrases : ajouter un mot restreint le résultat au lieu de l'élargir, et une phrase peut désormais être exclue.
Breaking
property.body.titleetproperty.body.descriptionn'acceptent plus une chaîne : envoyez{ "in": [...], "nin": [...] }, chaque entrée étant une phrase — une chaîne nue renvoie un400. Pour un résultat identique à l'ancien"a b", envoyez{ "in": ["a", "b"] }; aucune période de cohabitation, l'API étant en beta privée. Voir Filtrage — Recherche texte.
Added
property.body.<champ>.in— au moins une des phrases, mots côte à côte et dans l'ordre, casse et accents ignorés ; jusqu'à 25 par liste. Voir la référence.property.body.<champ>.nin— aucune des phrases. Voir Filtrage — Recherche texte.
Mise à jour partielle des alertesAPICopier le lien de cette entrée
PUT /alerts/{uuid} ne modifie désormais que les champs nommés dans le corps, comme toute autre mise à jour de l'API.
Changed
- Un champ omis du corps de
PUT /alerts/{uuid}conserve sa valeur enregistrée ; il était auparavant remis à sa valeur par défaut de création. Voir Alertes — mettre à jour une alerte. - Pour effacer un champ, envoyez-le à
null. En particulier, une alerte s'élargit à toutes les properties avec"criteria": null, et non plus en omettantcriteria.
Annotations des outils MCPMCPCopier le lien de cette entrée
Les outils du serveur MCP déclarent désormais leur comportement selon la spécification MCP : un titre lisible et les indications readOnlyHint, destructiveHint, idempotentHint et openWorldHint, comme l'exige l'annuaire des connecteurs Claude.
Changed
- Les outils de lecture (
search_properties,resolve_location,list_alerts) s'exécutent sans demande de confirmation dans un assistant qui respecte ces indications, Claude compris ; création, modification et suppression d'alerte continuent de demander confirmation. Voir Ce que l'assistant peut faire.
Added
- Chaque outil expose
titleetannotationsdans la réponsetools/list. Voir le guide MCP.
Cohérence des prixAPICopier le lien de cette entrée
Chaque annonce reçoit désormais un verdict de cohérence de prix, calculé en comparant son prix au m² à la médiane du marché local. Le verdict est conservateur : en cas de doute, le bien reste visible.
Changed
- Les properties dont toutes les annonces ont un prix incohérent sont masquées des résultats de
POST /propertieset des alertes par défaut —listings.priceCoherentvaut implicitementtrue, les biens au verdict indéterminé restent visibles. Voir Filtrage — masques par défaut. - Les champs de prix filtrables d'une property (
property.pricing.displayed,property.pricing.pricePerArea, variations de prix) sont calculés sans ses annonces au prix incohérent.
Added
listings.priceCoherent—truereproduit le comportement par défaut,falserenvoie uniquement les properties dont toutes les annonces sont incohérentes. Jugé au niveau de la property, contrairement aux autres filtreslistings. Voir la référence.
Reprise automatique des webhooks suspendusWebhooksCopier le lien de cette entrée
Une destination webhook coupée par le circuit breaker n'a plus besoin d'une réactivation manuelle pour reprendre les livraisons.
Changed
- Une destination
SUSPENDEDest sondée automatiquement (toutes les 5 minutes, puis à intervalle croissant jusqu'à 6 h) et repasse enACTIVEdès que votre endpoint répond, avec rejeu progressif des notifications suspendues ; la console reste disponible pour forcer la reprise. Voir Notifications — circuit breaker. - Au plus 5 000 notifications sont conservées par destination suspendue ; au-delà, les événements restent visibles mais ne sont plus rejoués. Voir Notifications — circuit breaker.
Serveur MCPMCPCopier le lien de cette entrée
Added
- Serveur MCP à
https://api-v2.stream.estate/mcp(transport HTTP, authentificationX-API-KEY). Permet à un assistant IA d'interroger l'API en langage naturel — voir le guide MCP. - Ventilation
byChanneldansGET /account/api-usagepour distinguer les appelsDIRECTdes appels passés viaMCP.
Webhooks signés HMACWebhooksCopier le lien de cette entrée
Added
- Webhook signing via header
X-Webhook-Signature: sha256=...etX-Webhook-Timestamppour la protection replay. Détails complets dans le guide webhooks. - Renouvellement de la clé depuis la console (console.stream.estate/webhooks) sans interrompre les livraisons en vol — voir le guide webhooks.
- Header
User-Agent: StreamEstate-Webhook/1.0sur toutes les requêtes sortantes.
Changed
- Les destinations webhook créées avant cette release obtiennent leur clé en la renouvelant une première fois depuis la console.