curl --location 'https://api.stream.estate/searches' \
--header 'Content-Type: application/json' \
--header 'X-API-KEY: <api_key>' \
--data-raw '{
"bedroomMin": 0,
"budgetMax": 1500000,
"budgetMin": 0,
"endpointRecipient": "https://hook.eu1.make.com/xyz",
"eventEndpoint": "https://hook.eu1.make.com/xyz",
"lat": 48.864716,
"lon": 2.349014,
"notificationEnabled": true,
"notificationRecipient": "foo@bar.com",
"propertyTypes": [0, 1],
"radius": 20,
"subscribedEvents": [
"property.ad.create"
],
"surfaceMax": 0,
"surfaceMin": 20,
"transactionType": 0,
"title": "mySearch"
}'
import requests
import json
url = "https://api.stream.estate/searches"
payload = json.dumps({
"bedroomMin": 0,
"budgetMax": 1500000,
"budgetMin": 0,
"endpointRecipient": "https://hook.eu1.make.com/xyz",
"eventEndpoint": "https://hook.eu1.make.com/xyz",
"lat": 48.864716,
"lon": 2.349014,
"notificationEnabled": True,
"notificationRecipient": "foo@bar.com",
"propertyTypes": [
0,
1
],
"radius": 20,
"subscribedEvents": [
"property.ad.create"
],
"surfaceMax": 0,
"surfaceMin": 20,
"transactionType": 0,
"title": "mySearch"
})
headers = {
'Content-Type': 'application/json',
'X-API-KEY': '<api_key>'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.json())
{
"@context": "/contexts/Search",
"@id": "/searches/xyz",
"@type": "Search",
"title": "mySearch",
"user": "/users/xyz",
"transactionType": 0,
"budgetMax": 1500000,
"budgetMin": 0,
"bedroomMin": 0,
"roomMin": null,
"surfaceMin": 20,
"surfaceMax": 0,
"propertyTypes": [
0,
1
],
"publisherTypes": [],
"lastAlertAt": null,
"token": "xyz",
"pricePerMeterMin": null,
"pricePerMeterMax": null,
"createdAt": "2023-06-04T00:39:53+02:00",
"updatedAt": "2023-06-04T00:39:53+02:00",
"notificationEnabled": true,
"includedCities": [],
"includedDepartments": [],
"excludedCities": [],
"expressions": [],
"notificationRecipient": "foo@bar.com",
"furnished": null,
"hidePropertyContact": false,
"withVirtualTour": null,
"withCoherentPrice": true,
"landSurfaceMin": null,
"landSurfaceMax": null,
"includedSiteCategories": [],
"excludedSiteCategories": [],
"endpointRecipient": "https://hook.eu1.make.com/xyz",
"eventEndpoint": "https://hook.eu1.make.com/xyz",
"subscribedEvents": [
"property.ad.create"
],
"radius": 20,
"lon": 2.349014,
"lat": 48.864716
}
Searches
Create Search
Creates a new search
POST
/
searches
curl --location 'https://api.stream.estate/searches' \
--header 'Content-Type: application/json' \
--header 'X-API-KEY: <api_key>' \
--data-raw '{
"bedroomMin": 0,
"budgetMax": 1500000,
"budgetMin": 0,
"endpointRecipient": "https://hook.eu1.make.com/xyz",
"eventEndpoint": "https://hook.eu1.make.com/xyz",
"lat": 48.864716,
"lon": 2.349014,
"notificationEnabled": true,
"notificationRecipient": "foo@bar.com",
"propertyTypes": [0, 1],
"radius": 20,
"subscribedEvents": [
"property.ad.create"
],
"surfaceMax": 0,
"surfaceMin": 20,
"transactionType": 0,
"title": "mySearch"
}'
import requests
import json
url = "https://api.stream.estate/searches"
payload = json.dumps({
"bedroomMin": 0,
"budgetMax": 1500000,
"budgetMin": 0,
"endpointRecipient": "https://hook.eu1.make.com/xyz",
"eventEndpoint": "https://hook.eu1.make.com/xyz",
"lat": 48.864716,
"lon": 2.349014,
"notificationEnabled": True,
"notificationRecipient": "foo@bar.com",
"propertyTypes": [
0,
1
],
"radius": 20,
"subscribedEvents": [
"property.ad.create"
],
"surfaceMax": 0,
"surfaceMin": 20,
"transactionType": 0,
"title": "mySearch"
})
headers = {
'Content-Type': 'application/json',
'X-API-KEY': '<api_key>'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.json())
{
"@context": "/contexts/Search",
"@id": "/searches/xyz",
"@type": "Search",
"title": "mySearch",
"user": "/users/xyz",
"transactionType": 0,
"budgetMax": 1500000,
"budgetMin": 0,
"bedroomMin": 0,
"roomMin": null,
"surfaceMin": 20,
"surfaceMax": 0,
"propertyTypes": [
0,
1
],
"publisherTypes": [],
"lastAlertAt": null,
"token": "xyz",
"pricePerMeterMin": null,
"pricePerMeterMax": null,
"createdAt": "2023-06-04T00:39:53+02:00",
"updatedAt": "2023-06-04T00:39:53+02:00",
"notificationEnabled": true,
"includedCities": [],
"includedDepartments": [],
"excludedCities": [],
"expressions": [],
"notificationRecipient": "foo@bar.com",
"furnished": null,
"hidePropertyContact": false,
"withVirtualTour": null,
"withCoherentPrice": true,
"landSurfaceMin": null,
"landSurfaceMax": null,
"includedSiteCategories": [],
"excludedSiteCategories": [],
"endpointRecipient": "https://hook.eu1.make.com/xyz",
"eventEndpoint": "https://hook.eu1.make.com/xyz",
"subscribedEvents": [
"property.ad.create"
],
"radius": 20,
"lon": 2.349014,
"lat": 48.864716
}
Body
number
Minimum number of bedrooms in the property.
number
Maximum number of bedrooms in the property.
number
Maximum budget for the property.
number
Minimum budget for the property.
string
HTTPS webhook that receives
match payloads whenever a property satisfies the search. Requires notificationEnabled=true. You can test your endpoint with our webhook simulator.string
HTTPS webhook that receives advert
event payloads (price changes, expirations, etc.) from the searches you subscribe to. Requires notificationEnabled=true and at least one entry in subscribedEvents. You can test your endpoint with our webhook simulator.array
Cities to be excluded.
array
Source sites to be excluded.
array
Site categories to be excluded.
array
Full text matching including/excluding words & phrases in the title or the description of the property.
Example:
expressions[0][0][word]=travaux&expressions[0][0][options][includes]=true&expressions[0][0][options][strict]=false&expressions[0][1][word]=lumineux&expressions[0][1][options][includes]=true&expressions[0][1][options][strict]=false which will search for properties that contain both the keywords lumineux and travaux.boolean
Whether the property is furnished or not.
number
Filters properties by geocoding confidence level. Use
1 to keep only house-number level matches and 2 to include neighborhood-level approximations. Leave empty to allow both.array
Filters properties within specified geographic areas. Example:
geoShapes=geoShapes[0][0][0]=6.063201&geoShapes[0][0][1]=44.549092&geoShapes[0][1][0]=6.063201&geoShapes[0][1][1]=44.543009&geoShapes[0][2][0]=6.073453&geoShapes[0][2][1]=44.543293&geoShapes[0][3][0]=6.073453&geoShapes[0][3][1]=44.549092&geoShapes[0][4][0]=6.063201&geoShapes[0][4][1]=44.549092.boolean
Whether to hide property contact information or not.
array
Included site categories.
array
Source sites to be included.
array
Included zipcodes.
array
Included INSEE codes (used to infer the cities associated with the search).
number
Maximum land surface.
number
Minimum land surface.
number
Latitude of the center point used for radial filtering. Provide together with
lon, otherwise this filter has no effect. Example: lat=48.864716number
Longitude of the center point used for radial filtering. Provide together with
lat. Example: lon=2.349014boolean
default:"false"
Enables delivery of matches and events either by webhook (
endpointRecipient, eventEndpoint) or by email (notificationRecipient).string
Email address that receives alert summaries when
notificationEnabled=true. Use this as a fallback if you do not have a webhook yet.number
Maximum price per meter.
number
Minimum price per meter.
number[]
required
Type of property. Apartment
0, House 1, Building 2, Parking 3, Office 4, Land 5, Shop 6. Example: propertyTypes[]=0&propertyTypes[]=1array
Type of publisher. Individual
0, Professional 1. Example: publisherTypes[]=0&publisherTypes[]=1number
Distance in kilometers around the provided
lat/lon. Example: radius=20, radius=0.5number
Minimum number of rooms.
number
Maximum number of rooms.
array
Event codes (e.g.
property.ad.create, ad.update.price, ad.update.expired) you want to receive on the eventEndpoint. See the webhook simulator page for the full list.number
Maximum property surface area.
number
Minimum property surface area.
string
required
Title of the created search.
number
required
Type of transaction. Sell
0, Rent 1. Example: transactionType=0boolean
Price coherence filter.
true returns adverts whose price passes our coherence checks; false returns adverts flagged as incoherent — both also include adverts whose price has not been assessed. Set to null (or send an empty value) to disable filtering. If omitted, defaults to true.boolean
Whether the property includes a virtual tour.
curl --location 'https://api.stream.estate/searches' \
--header 'Content-Type: application/json' \
--header 'X-API-KEY: <api_key>' \
--data-raw '{
"bedroomMin": 0,
"budgetMax": 1500000,
"budgetMin": 0,
"endpointRecipient": "https://hook.eu1.make.com/xyz",
"eventEndpoint": "https://hook.eu1.make.com/xyz",
"lat": 48.864716,
"lon": 2.349014,
"notificationEnabled": true,
"notificationRecipient": "foo@bar.com",
"propertyTypes": [0, 1],
"radius": 20,
"subscribedEvents": [
"property.ad.create"
],
"surfaceMax": 0,
"surfaceMin": 20,
"transactionType": 0,
"title": "mySearch"
}'
import requests
import json
url = "https://api.stream.estate/searches"
payload = json.dumps({
"bedroomMin": 0,
"budgetMax": 1500000,
"budgetMin": 0,
"endpointRecipient": "https://hook.eu1.make.com/xyz",
"eventEndpoint": "https://hook.eu1.make.com/xyz",
"lat": 48.864716,
"lon": 2.349014,
"notificationEnabled": True,
"notificationRecipient": "foo@bar.com",
"propertyTypes": [
0,
1
],
"radius": 20,
"subscribedEvents": [
"property.ad.create"
],
"surfaceMax": 0,
"surfaceMin": 20,
"transactionType": 0,
"title": "mySearch"
})
headers = {
'Content-Type': 'application/json',
'X-API-KEY': '<api_key>'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.json())
{
"@context": "/contexts/Search",
"@id": "/searches/xyz",
"@type": "Search",
"title": "mySearch",
"user": "/users/xyz",
"transactionType": 0,
"budgetMax": 1500000,
"budgetMin": 0,
"bedroomMin": 0,
"roomMin": null,
"surfaceMin": 20,
"surfaceMax": 0,
"propertyTypes": [
0,
1
],
"publisherTypes": [],
"lastAlertAt": null,
"token": "xyz",
"pricePerMeterMin": null,
"pricePerMeterMax": null,
"createdAt": "2023-06-04T00:39:53+02:00",
"updatedAt": "2023-06-04T00:39:53+02:00",
"notificationEnabled": true,
"includedCities": [],
"includedDepartments": [],
"excludedCities": [],
"expressions": [],
"notificationRecipient": "foo@bar.com",
"furnished": null,
"hidePropertyContact": false,
"withVirtualTour": null,
"withCoherentPrice": true,
"landSurfaceMin": null,
"landSurfaceMax": null,
"includedSiteCategories": [],
"excludedSiteCategories": [],
"endpointRecipient": "https://hook.eu1.make.com/xyz",
"eventEndpoint": "https://hook.eu1.make.com/xyz",
"subscribedEvents": [
"property.ad.create"
],
"radius": 20,
"lon": 2.349014,
"lat": 48.864716
}