> ## Documentation Index
> Fetch the complete documentation index at: https://docs.stream.estate/llms.txt
> Use this file to discover all available pages before exploring further.

# Create Search

> Creates a new search

### Body

<ParamField body="bedroomMin" type="number">
  Minimum number of bedrooms in the property.
</ParamField>

<ParamField body="bedroomMax" type="number">
  Maximum number of bedrooms in the property.
</ParamField>

<ParamField body="budgetMax" type="number">
  Maximum budget for the property.
</ParamField>

<ParamField body="budgetMin" type="number">
  Minimum budget for the property.
</ParamField>

<ParamField body="endpointRecipient" type="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](/api-reference/endpoint/webhooks/send).
</ParamField>

<ParamField body="eventEndpoint" type="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](/api-reference/endpoint/webhooks/send).
</ParamField>

<ParamField body="excludedCities" type="array">
  Cities to be excluded.
</ParamField>

<ParamField body="excludedSites" type="array">
  Source sites to be excluded.
</ParamField>

<ParamField body="excludedSiteCategories" type="array">
  Site categories to be excluded.
</ParamField>

<ParamField body="expressions" type="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`.
</ParamField>

<ParamField body="furnished" type="boolean">
  Whether the property is furnished or not.
</ParamField>

<ParamField body="geoAccuracy" type="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.
</ParamField>

<ParamField body="geoShapes" type="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`.
</ParamField>

<ParamField body="hidePropertyContact" type="boolean">
  Whether to hide property contact information or not.
</ParamField>

<ParamField body="includedCities" type="array">
  Included cities. Use [locations](/api-reference/endpoint/indicators/locations) to get the desired city ids.
</ParamField>

<ParamField body="includedDepartments" type="array">
  Included departments. Use [locations](/api-reference/endpoint/indicators/locations) to get the desired city ids.
</ParamField>

<ParamField body="includedSiteCategories" type="array">
  Included site categories.
</ParamField>

<ParamField body="includedSites" type="array">
  Source sites to be included.
</ParamField>

<ParamField body="includedZipcodes" type="array">
  Included zipcodes.
</ParamField>

<ParamField body="includedZipcodesInsee" type="array">
  Included INSEE codes (used to infer the cities associated with the search).
</ParamField>

<ParamField body="landSurfaceMax" type="number">
  Maximum land surface.
</ParamField>

<ParamField body="landSurfaceMin" type="number">
  Minimum land surface.
</ParamField>

<ParamField body="lat" type="number">
  Latitude of the center point used for radial filtering. Provide together with `lon`, otherwise this filter has no effect. Example: `lat=48.864716`
</ParamField>

<ParamField body="lon" type="number">
  Longitude of the center point used for radial filtering. Provide together with `lat`. Example: `lon=2.349014`
</ParamField>

<ParamField body="notificationEnabled" type="boolean" default="false">
  Enables delivery of matches and events either by webhook (`endpointRecipient`, `eventEndpoint`) or by email (`notificationRecipient`).
</ParamField>

<ParamField body="notificationRecipient" type="string">
  Email address that receives alert summaries when `notificationEnabled=true`. Use this as a fallback if you do not have a webhook yet.
</ParamField>

<ParamField body="pricePerMeterMax" type="number">
  Maximum price per meter.
</ParamField>

<ParamField body="pricePerMeterMin" type="number">
  Minimum price per meter.
</ParamField>

<ParamField body="propertyTypes" type="number[]" required>
  Type of property. Apartment `0`, House `1`, Building `2`, Parking `3`, Office `4`, Land `5`, Shop `6`. Example: `propertyTypes[]=0&propertyTypes[]=1`
</ParamField>

<ParamField body="publisherTypes" type="array">
  Type of publisher. Individual `0`, Professional `1`. Example: `publisherTypes[]=0&publisherTypes[]=1`
</ParamField>

<ParamField body="radius" type="number">
  Distance in kilometers around the provided `lat`/`lon`. Example: `radius=20`, `radius=0.5`
</ParamField>

<ParamField body="roomMin" type="number">
  Minimum number of rooms.
</ParamField>

<ParamField body="roomMax" type="number">
  Maximum number of rooms.
</ParamField>

<ParamField body="subscribedEvents" type="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](/api-reference/endpoint/webhooks/send) for the full list.
</ParamField>

<ParamField body="surfaceMax" type="number">
  Maximum property surface area.
</ParamField>

<ParamField body="surfaceMin" type="number">
  Minimum property surface area.
</ParamField>

<ParamField body="title" type="string" required>
  Title of the created search.
</ParamField>

<ParamField body="transactionType" type="number" required>
  Type of transaction. Sell `0`, Rent `1`. Example: `transactionType=0`
</ParamField>

<ParamField body="withCoherentPrice" type="boolean" default="true">
  Excludes adverts whose price has been flagged as incoherent/outlier by our quality checks. Set to `false` to return every result regardless of price sanity.
</ParamField>

<ParamField body="withVirtualTour" type="boolean">
  Whether the property includes a virtual tour.
</ParamField>

<RequestExample>
  ```bash cURL theme={null}
  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"
  }'
  ```

  ```python Python theme={null}

  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())
  ```
</RequestExample>

<ResponseExample>
  ```json Example Response theme={null}
  {
      "@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
  }
  ```
</ResponseExample>
