### Basic Property Filtering Example Source: https://next.docs.stream.estate/docs/guides/filtering Use this example to filter apartments for sale in Paris with specific pricing, area, room count, and balcony features. Ensure the country code and city unique code are correctly specified. ```curl curl -X POST "https://api-v2.stream.estate/properties" \ -H "X-API-Key: " \ -H "Content-Type: application/json" \ -d '{ "criteria": { "property": { "type": { "in": ["FLAT"] }, "transaction": { "type": "SELL" }, "pricing": { "displayed": { "gte": 200000, "lte": 600000 } }, "areas": { "displayed": { "gte": 50 } }, "unit": { "rooms": { "gte": 3, "lte": 5 }, "features": { "in": ["BALCONY"] } }, "locations": { "countryCode": "FR", "in": { "uniqueCodes": ["75056"] } } } }, "paginationType": "PAGE", "page": 1, "size": 20 }' ``` -------------------------------- ### CURSOR Pagination - Response Example Source: https://next.docs.stream.estate/docs/guides/pagination The response includes items, total count, a boolean indicating if there's a next page, and an opaque cursor for subsequent requests. ```json { "items": [ /* 50 résultats */ ], "totalItems": 4231, "hasNextPage": true, "cursor": "eyJzb3J0IjpbMTc3ODg0NDY0MzAwMCwiMDE5Z..." } ``` -------------------------------- ### Combining Filters with OR Node Source: https://next.docs.stream.estate/docs/guides/filtering This example demonstrates how to use an 'or' node to combine two different property search criteria. It will match properties that are either apartments with at least 60 sqm or houses with at least 100 sqm and a land of at least 300 sqm. ```json { "criteria": { "or": [ { "property": { "type": { "in": ["FLAT"] }, "areas": { "displayed": { "gte": 60 } } } }, { "property": { "type": { "in": ["HOUSE"] }, "areas": { "displayed": { "gte": 100 }, "land": { "gte": 300 } } } } ] }, "paginationType": "PAGE", "size": 20 } ``` -------------------------------- ### CURSOR Pagination - First Request Source: https://next.docs.stream.estate/docs/guides/pagination Initiate cursor-based pagination by omitting or setting 'cursor' to null. This method is recommended for scraping or long lists as it provides stable results even with data insertions. ```json { "paginationType": "CURSOR", "size": 50, "criteria": { "property": { "type": { "in": ["FLAT"] } } } } ``` -------------------------------- ### Cursor-based Pagination (CURSOR) Source: https://next.docs.stream.estate/docs/guides/pagination Recommended for stable data exports. Uses a cursor token for consistent results, even with data insertions. Omit or set 'cursor' to null for the first request. ```APIDOC ## POST /properties (CURSOR Pagination) ### Description Retrieves a list of properties using stable cursor-based pagination. ### Method POST ### Endpoint /properties ### Parameters #### Request Body - **paginationType** (string) - Optional - Defaults to "PAGE". Use "CURSOR" for cursor-based pagination. - **size** (integer) - Optional - Defaults to 10. Maximum is 100. The number of items per page. - **cursor** (string) - Optional - The cursor token from the previous response. Omit or set to null for the first request. - **criteria** (object) - Optional - Filtering criteria for properties. - **property** (object) - Optional - Property-specific criteria. - **type** (object) - Optional - Type of property. - **in** (array) - Required - Array of property types (e.g., ["FLAT"]). ### Request Example (First Request) ```json { "paginationType": "CURSOR", "size": 50, "criteria": { "property": { "type": { "in": ["FLAT"] } } } } ``` ### Request Example (Next Page) ```json { "paginationType": "CURSOR", "size": 50, "cursor": "eyJzb3J0IjpbMTc3ODg0NDY0MzAwMCwiMDE5Z...", "criteria": { "property": { "type": { "in": ["FLAT"] } } } } ``` ### Response #### Success Response (200) - **items** (array) - List of properties. - **totalItems** (integer) - Total number of items available. - **hasNextPage** (boolean) - Indicates if there are more results. - **cursor** (string) - Opaque cursor token for the next request. #### Response Example ```json { "items": [ /* ... property objects ... */ ], "totalItems": 4231, "hasNextPage": true, "cursor": "eyJzb3J0IjpbMTc3ODg0NDY0MzAwMCwiMDE5Z..." } ``` ``` -------------------------------- ### Webhooks and Notifications Migration Source: https://next.docs.stream.estate/docs/migration Explains the transition from v1 webhooks to the new EventDestination system in v2, including signing keys and event types. ```APIDOC ## Webhooks & Notifications ### `EventDestination` System (v2) **Description**: V2 replaces the simple webhook URL in v1 with a comprehensive `EventDestination` system. This system allows for reusable destinations, HMAC signing with a `signingKey`, and detailed delivery logging via `EventNotification`. Destinations are managed via collection endpoints (`GET`/`POST`) and individual endpoints (`GET`/`DELETE` by UUID). **v1**: Webhook URL specified within the Search. **v2**: `EventDestination` collection (`GET`/`POST`) and individual resources (`GET`/`DELETE` by UUID). **v2 Security**: `signingKey` for HMAC signatures. **Note**: If you need to update a destination, you must recreate it as destinations are not directly updatable. ### Event Types **Description**: V2 introduces new event types for notifications, providing more granular information about changes. **v1 Event Types**: `ad.update.*`, `property.ad.*` **v2 Event Types**: `NEW_MATCH`, `ADDITIONAL_LISTING`, `PRICE_CHANGED`, `ANY_ATTRIBUTE_CHANGED`, `LISTING_EXPIRED`. ### `EventNotification` Journal **Description**: V2 provides a detailed journal of all delivery attempts for notifications. **v2 Endpoint**: `GET /event-notifications` (Full delivery attempt log) **v2 Endpoint**: `GET /event-notifications/{uuid}` (Specific delivery attempt details) ### New Account Endpoints **Description**: V2 adds endpoints for managing webhook signing keys and reactivating event destinations. **v2 Endpoint**: `POST /account/webhook-signing-key/rotate` (Rotate signing key) **v2 Endpoint**: `POST /account/event-destinations/{uuid}/reactivate` (Reactivate a destination after circuit breaker) ``` -------------------------------- ### CURSOR Pagination - Next Request Source: https://next.docs.stream.estate/docs/guides/pagination To fetch the next page in cursor-based pagination, resubmit the request with the 'cursor' value received in the previous response. Loop until 'hasNextPage' is false. Do not attempt to parse the cursor. ```json { "paginationType": "CURSOR", "size": 50, "cursor": "eyJzb3J0IjpbMTc3ODg0NDY0MzAwMCwiMDE5Z...", "criteria": { "property": { "type": { "in": ["FLAT"] } } } } ``` -------------------------------- ### EventDestination Management Source: https://next.docs.stream.estate/docs/concepts/notifications Manage webhook and email event destinations. ```APIDOC ## List Event Destinations ### Description Retrieves a list of all configured event destinations. ### Method GET ### Endpoint /account/event-destinations ## Create Event Destination ### Description Creates a new event destination (webhook or email). The `signingKey` is returned only in the response of this POST request. ### Method POST ### Endpoint /account/event-destinations ### Request Body - **destinationType** (enum) - Required - Type of destination (`WEBHOOK` or `EMAIL`) - **url** (string) - Optional - Webhook URL (required if `destinationType` is `WEBHOOK`) - **email** (string) - Optional - Email address (required if `destinationType` is `EMAIL`) - **isDefault** (boolean) - Optional - Whether this is the default destination for its type ### Response #### Success Response (201 Created) - **id** (string) - The unique identifier of the event destination. - **destinationType** (enum) - The type of the destination. - **url** (string) - The webhook URL. - **email** (string) - The email address. - **isDefault** (boolean) - Indicates if it's the default destination. - **status** (enum) - The current status (`ACTIVE` or `SUSPENDED`). - **signingKey** (string) - The HMAC signing key (returned only once upon creation). - **createdAt** (string) - ISO 8601 timestamp of creation. - **updatedAt** (string) - ISO 8601 timestamp of last update. ## Get Event Destination Details ### Description Retrieves the details of a specific event destination by its UUID. ### Method GET ### Endpoint /account/event-destinations/{uuid} ### Parameters #### Path Parameters - **uuid** (string) - Required - The UUID of the event destination ## Delete Event Destination ### Description Deletes a specific event destination by its UUID. ### Method DELETE ### Endpoint /account/event-destinations/{uuid} ### Parameters #### Path Parameters - **uuid** (string) - Required - The UUID of the event destination ## Reactivate Suspended Event Destination ### Description Reactivates an event destination that has been suspended due to consecutive delivery failures. ### Method POST ### Endpoint /account/event-destinations/{uuid}/reactivate ### Parameters #### Path Parameters - **uuid** (string) - Required - The UUID of the event destination to reactivate ## Rotate Global Webhook Signing Key ### Description Initiates the rotation of the global webhook signing key. ### Method POST ### Endpoint /account/webhook-signing-key/rotate ``` -------------------------------- ### Page-based Pagination (PAGE) Source: https://next.docs.stream.estate/docs/guides/pagination Uses traditional page and size parameters. Increment the 'page' number until 'hasNextPage' is false. Be aware of potential duplicate or omitted items if data changes between requests. ```APIDOC ## POST /properties (PAGE Pagination) ### Description Retrieves a list of properties using page-based pagination. ### Method POST ### Endpoint /properties ### Parameters #### Request Body - **paginationType** (string) - Optional - Defaults to "PAGE". Use "PAGE" for page-based pagination. - **page** (integer) - Required - The page number to retrieve (starts from 1). - **size** (integer) - Optional - Defaults to 10. Maximum is 100. The number of items per page. - **criteria** (object) - Optional - Filtering criteria for properties. - **property** (object) - Optional - Property-specific criteria. - **type** (object) - Optional - Type of property. - **in** (array) - Required - Array of property types (e.g., ["FLAT"]). ### Request Example ```json { "paginationType": "PAGE", "page": 1, "size": 20, "criteria": { "property": { "type": { "in": ["FLAT"] } } } } ``` ### Response #### Success Response (200) - **items** (array) - List of properties. - **totalItems** (integer) - Total number of items available. - **hasNextPage** (boolean) - Indicates if there is a next page of results. #### Response Example ```json { "items": [ /* ... property objects ... */ ], "totalItems": 4231, "hasNextPage": true } ``` ``` -------------------------------- ### Properties Endpoint Migration Source: https://next.docs.stream.estate/docs/migration Compares the v1 and v2 endpoints for managing properties, highlighting changes in URL structure and request methods. ```APIDOC ## Properties ### `GET /documents/properties` (v1) vs `POST /properties` (v2) **Description**: The method for retrieving properties has changed from a GET request with numerous query parameters in v1 to a POST request with a structured JSON body in v2. The v2 approach uses a recursive `criteria` tree for filtering and supports pagination via `PAGE` or `CURSOR`. **v1 Method**: `GET` **v1 Endpoint**: `/documents/properties` (with 70+ query parameters) **v2 Method**: `POST` **v2 Endpoint**: `/properties` **v2 Request Body**: JSON object structured around a recursive `criteria` tree (including `Filters`, `and`, `or`). ### `GET /documents/properties/{id}` (v1) vs `GET /properties/{uuid}` (v2) **Description**: The endpoint for retrieving a specific property has been simplified in v2, with the path parameter changing from `id` to `uuid`. **v1 Method**: `GET` **v1 Endpoint**: `/documents/properties/{id}` **v2 Method**: `GET` **v2 Endpoint**: `/properties/{uuid}` ### `GET /documents/properties/{id}/similar-properties` (v1) vs New Estimation Endpoints (v2) **Description**: The endpoint for similar properties in v1 is being replaced by new estimation endpoints in v2, which will provide more advanced property valuation features. ``` -------------------------------- ### v2 Alert Creation Body Source: https://next.docs.stream.estate/docs/migration The v2 Alert (formerly Search) endpoint uses a unified criteria tree and declarative notification destination. Construct this JSON body to create new alerts. ```json { "name": "Appartements 3+ pièces à Paris", "active": true, "criteria": { "property": { "type": { "in": ["FLAT"] }, "transaction": { "type": "SELL" }, "unit": { "rooms": { "gte": 3 } }, "locations": { "countryCode": "FR", "in": { "uniqueCodes": ["75056"] } } } }, "notificationConfig": { "rules": [ { "eventType": "NEW_MATCH", "enabled": true }, { "eventType": "PRICE_CHANGED", "thresholdPercentage": 5, "thresholdDirection": "DECREASE", "enabled": true } ] }, "notificationDestination": { "webhookUrl": "https://your.app/hook" } } ``` -------------------------------- ### PAGE Pagination Request Source: https://next.docs.stream.estate/docs/guides/pagination Use this structure for simple, offset-based pagination. Increment the 'page' field until 'hasNextPage' is false. Be aware of potential duplicate or omitted items if data changes between requests. ```json { "paginationType": "PAGE", "page": 1, "size": 20, "criteria": { "property": { "type": { "in": ["FLAT"] } } } } ``` -------------------------------- ### New v2 Endpoints Source: https://next.docs.stream.estate/docs/migration Highlights new endpoints introduced in v2 for API usage, analytics, favorite properties, and event notifications. ```APIDOC ## New Features in v2 ### API Usage Statistics **Endpoint**: `GET /account/api-usage` **Description**: Retrieves billable API usage aggregates, with options to view totals, by API key, or by route, over a specified `startDate` and `endDate`. ### Listing Analytics **Endpoint**: `GET /analytics/listings` **Description**: Provides aggregated statistics related to property listings. ### Favorite Properties **Endpoints**: - `GET /favorite-properties` (List favorites) - `POST /favorite-properties` (Add favorite) - `DELETE /favorite-properties/{uuid}` (Remove favorite by UUID) **Description**: New endpoints for managing a user's favorite properties, allowing retrieval of the list, addition of new favorites, and deletion of specific favorites by their UUID. ``` -------------------------------- ### Webhook Security Source: https://next.docs.stream.estate/docs/concepts/notifications Information on how to secure webhook endpoints. ```APIDOC ## Secure a Webhook ### Description Incoming POST requests to your webhook endpoint are signed using the `signingKey`. You should verify the HMAC-SHA256 signature in the `X-Hub-Signature-256` header before processing the payload. The exact header name can be confirmed from the `POST /account/event-destinations` response or the API Reference. ``` -------------------------------- ### Standard Error Format Source: https://next.docs.stream.estate/docs/reference/error-codes The API returns errors in the problem+json format, which includes a type, title, status, detail, and instance URI. ```APIDOC ## Standard Error Format ### Description The API returns errors in the problem+json format (RFC 7807). ### Response Body Example ```json { "type": "...", "title": "...", "status": 400, "detail": "Explication détaillée", "instance": "/properties?..." } ``` ### Fields | Field | Type | Description | |---|---|---| | `type` | string | URI identifying the error type | | `title` | string | null | Short summary | | `status` | number | HTTP status code | | `detail` | string | null | Detailed description | | `instance` | string | null | URI of the faulty request | ``` -------------------------------- ### AND / OR Nodes Source: https://next.docs.stream.estate/docs/guides/filtering Combine multiple criteria nodes using 'and:' or 'or:'. Each array can contain 2 to 10 child nodes. ```APIDOC ## AND / OR Nodes ### Description Used to combine multiple criteria nodes. Each child node can be a Filters leaf, another AND node, or another OR node. Each array accepts 2 to 10 children. ### Example (OR Node) ```json { "criteria": { "or": [ { "property": { "type": { "in": ["FLAT"] }, "areas": { "displayed": { "gte": 60 } } } }, { "property": { "type": { "in": ["HOUSE"] }, "areas": { "displayed": { "gte": 100 }, "land": { "gte": 300 } } } } ] }, "paginationType": "PAGE", "size": 20 } ``` ``` -------------------------------- ### POST /properties Request Body Structure Source: https://next.docs.stream.estate/docs/guides/filtering The request body for POST /properties is based on a single field `criteria`, which is a recursive tree. Omit `criteria` to match all properties. ```APIDOC ## POST /properties ### Description Allows filtering of properties based on a structured criteria object. ### Method POST ### Endpoint /properties ### Parameters #### Request Body - **criteria** (CriteriaNode) - Optional - A recursive tree node for filtering. Can be a `Filters` leaf, an `and` node, or an `or` node. - **paginationType** (enum) - Optional - Specifies pagination strategy. Defaults to "PAGE". Can be "PAGE" or "CURSOR". - **page** (integer) - Optional - The page number for pagination. Defaults to 1. Minimum 1. Only honored in PAGE mode. - **cursor** (string) - Optional - The cursor for paginated results. Only honored in CURSOR mode. - **size** (integer) - Optional - The number of items per page. Defaults to 10. Range: 1-100. - **sort** (object) - Optional - Sorting directive (field + direction). ### Request Example (Simple Filter) ```json { "criteria": { "property": { "type": { "in": ["FLAT"] }, "transaction": { "type": "SELL" }, "pricing": { "displayed": { "gte": 200000, "lte": 600000 } }, "areas": { "displayed": { "gte": 50 } }, "unit": { "rooms": { "gte": 3, "lte": 5 }, "features": { "in": ["BALCONY"] } }, "locations": { "countryCode": "FR", "in": { "uniqueCodes": ["75056"] } } } }, "paginationType": "PAGE", "page": 1, "size": 20 } ``` ### Response #### Success Response (200) - **items** (PropertySearchResultDTO[]) - An array of property search results. - **totalItems** (integer) - The total number of matching properties. - **hasNextPage** (boolean) - Indicates if there are more pages of results. - **cursor** (string) - An opaque cursor for next page requests in CURSOR mode. Null in PAGE mode. #### Response Example ```json { "items": [ /* PropertySearchResultDTO[] */ ], "totalItems": 1847, "hasNextPage": true, "cursor": "eyJzb3J0Ijpb..." } ``` ``` -------------------------------- ### EventNotification Journal Source: https://next.docs.stream.estate/docs/concepts/notifications Access logs for event delivery attempts. ```APIDOC ## List Event Notifications ### Description Retrieves a paginated list of event delivery notifications. ### Method GET ### Endpoint /event-notifications ### Query Parameters - **page** (integer) - Optional - The page number for pagination. ## Get Event Notification Details ### Description Retrieves the details of a specific event notification by its UUID. ### Method GET ### Endpoint /event-notifications/{uuid} ### Parameters #### Path Parameters - **uuid** (string) - Required - The UUID of the event notification ``` -------------------------------- ### Documented Error Codes by Endpoint Source: https://next.docs.stream.estate/docs/reference/error-codes This section lists the common HTTP status codes returned by API endpoints and their general usage. ```APIDOC ## Documented Error Codes by Endpoint ### Description The OpenAPI endpoints expose the following codes depending on the context. ### Codes | Code | Usage | |---|---| | `200` | Success (read) | | `201` | Resource created | | `204` | Success without content (DELETE) | | `400` | Invalid request (malformed parameter) | | `403` | Access denied | | `404` | Resource not found | | `422` | Validation failed — see `violations` | **Note:** The `429 Too Many Requests` code is not declared on individual endpoint responses but is applied globally by the upstream rate-limiter. It can be considered a possible response on any route in addition to the codes listed above. ``` -------------------------------- ### Cities/Geo and Indicators Migration Source: https://next.docs.stream.estate/docs/migration Covers the changes to the Cities and Indicators endpoints, including new ways to access geographical data and upcoming estimation features. ```APIDOC ## Cities / Geo ### `GET /cities` (v1) vs `GET /geo/administrative-divisions/{uuid}` (v2) **Description**: The v1 `/cities` endpoint, which provided a collection of cities, is replaced in v2 by an endpoint that retrieves administrative divisions by UUID. Direct collection access is not available in v2 for this resource. **v1 Method**: `GET` **v1 Endpoint**: `/cities` **v2 Method**: `GET` **v2 Endpoint**: `/geo/administrative-divisions/{uuid}` (Lookup by UUID only) ### `GET /public/location-autocomplete` (v1) vs `GET /geo/autocomplete` (v2) **Description**: The location autocomplete functionality has been moved to a new endpoint in v2. **v1 Method**: `GET` **v1 Endpoint**: `/public/location-autocomplete` **v2 Method**: `GET` **v2 Endpoint**: `/geo/autocomplete` ## Indicators & Miscellaneous ### `GET /indicators/*` (v1) vs New Estimation Endpoints (v2) **Description**: The various `/indicators/*` endpoints in v1, such as `points_of_interest` and `price_per_meter`, are being deprecated and will be replaced by new, more advanced estimation endpoints in v2. ``` -------------------------------- ### Searches to Alerts Migration Source: https://next.docs.stream.estate/docs/migration Details the changes in the Searches API, which has been renamed to Alerts in v2, including modifications to endpoints and request bodies. ```APIDOC ## Searches → Alerts ### `GET /searches` (v1) vs `GET /alerts` (v2) **Description**: The endpoint for listing searches has been renamed to `/alerts` in v2. **v1 Method**: `GET` **v1 Endpoint**: `/searches` **v2 Method**: `GET` **v2 Endpoint**: `/alerts` ### `GET /searches/{id}` (v1) vs `GET /alerts/{uuid}` (v2) **Description**: The endpoint for retrieving a specific search has been renamed to `/alerts/{uuid}` in v2, with the identifier changing from `id` to `uuid`. **v1 Method**: `GET` **v1 Endpoint**: `/searches/{id}` **v2 Method**: `GET` **v2 Endpoint**: `/alerts/{uuid}` ### `POST /searches` (v1) vs `POST /alerts` (v2) **Description**: Creating a new search (now an alert) in v2 involves a remade request body that is structured around `criteria` and includes `notificationDestination`. **v1 Method**: `POST` **v1 Endpoint**: `/searches` **v2 Method**: `POST` **v2 Endpoint**: `/alerts` **v2 Request Body**: Remade body around `criteria` and `notificationDestination`. ### `PUT /searches/{id}` (v1) vs `PUT /alerts/{uuid}` (v2) **Description**: Updating an existing search (now an alert) uses the `/alerts/{uuid}` endpoint in v2, with the identifier changing from `id` to `uuid`. **v1 Method**: `PUT` **v1 Endpoint**: `/searches/{id}` **v2 Method**: `PUT` **v2 Endpoint**: `/alerts/{uuid}` ### `DELETE /searches/{id}` (v1) vs `DELETE /alerts/{uuid}` (v2) **Description**: Deleting a search (now an alert) is done via the `/alerts/{uuid}` endpoint in v2, with the identifier changing from `id` to `uuid`. **v1 Method**: `DELETE` **v1 Endpoint**: `/searches/{id}` **v2 Method**: `DELETE` **v2 Endpoint**: `/alerts/{uuid}` ### New Endpoints for Alert Events **Description**: V2 introduces new endpoints to access the history and details of alert events. **v2 Endpoint**: `GET /alerts/{alertUuid}/events` (History of matches) **v2 Endpoint**: `GET /alerts/{alertUuid}/events/{uuid}` (Detail of an event) ``` -------------------------------- ### v2 Property Search Result Structure Source: https://next.docs.stream.estate/docs/migration The v2 API returns a PropertySearchResultDTO containing a canonical property view and distinct listing variants. Use this structure to access property details and specific listing information. ```json { "id": "019dedb1-fdf4-714c-8392-5b9cfd63cde3", "property": { "createdAt": "2025-01-15T10:30:00+00:00", "updatedAt": "2025-06-15T12:00:00+00:00", "propertyType": "FLAT", "transaction": { "type": "SELL" /* + status, mandate, saleType, availableAt */ }, "area": { /* displayed, indoor, outdoor, land */ }, "unit": { /* rooms, bedrooms, features, condition */ }, "building": { /* constructionYear, floors, condition */ } }, "publishers": [/* PublisherSectionDTO[] dédoublonnés */], "listings": [/* ListingSectionDTO[] : url, source, publishedAt, lastSeenAt et toutes les variantes qui diffèrent du canonique */] } ``` -------------------------------- ### Standard Error Format Source: https://next.docs.stream.estate/docs/reference/error-codes The API returns errors in the problem+json format (RFC 7807). This structure includes a type, title, status code, detailed explanation, and the instance of the request that caused the error. ```json { "type": "...", "title": "...", "status": 400, "detail": "Explication détaillée", "instance": "/properties?..." } ``` -------------------------------- ### Validation Error Format (422) Source: https://next.docs.stream.estate/docs/reference/error-codes For validation errors, the response body includes an additional 'violations' array detailing each specific validation failure, including the property path and the error message. ```json { "type": "/errors/validation", "title": "Validation failed", "status": 422, "detail": "...", "violations": [ { "propertyPath": "price.gte", "message": "must be positive" } ] } ``` -------------------------------- ### 422 Validation Errors Source: https://next.docs.stream.estate/docs/reference/error-codes For validation errors, the response body includes an additional `violations` array detailing the specific validation failures. ```APIDOC ## 422 Validation (ConstraintViolation) ### Description For validation errors, the response body also contains a `violations` array. ### Response Body Example ```json { "type": "/errors/validation", "title": "Validation failed", "status": 422, "detail": "...", "violations": [ { "propertyPath": "price.gte", "message": "must be positive" } ] } ``` ``` -------------------------------- ### Filters Leaf Node Source: https://next.docs.stream.estate/docs/guides/filtering A Filters leaf node groups filters by facet. All filters within a leaf are combined with AND. ```APIDOC ## Filters Leaf Node ### Description Groups filters by facet. All filters within a leaf are combined with AND. ### Facets - **property**: Filters related to property characteristics (type, transaction, pricing, areas, locations, unit, building, amenities, body). - **publisher**: Filters related to the publisher (type, mandate, references, hasEmail, hasPhone). - **listings**: Filters related to the listing (url, sources, marketing). - **dates**: Filters related to dates (createdAt, updatedAt). For detailed sub-fields, refer to the `/api-reference`. ``` === COMPLETE CONTENT === This response contains all available snippets from this library. No additional content exists. Do not make further requests.