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

# Filtres communs de recherche immobilière API

> Référence des filtres communs : search Properties + alertes Properties + alertes Adverts. Location, offer, price, habitation, meta, type.

Cette page liste les filtres communs aux endpoints **search Properties** et **alertes Properties / Adverts**. Le payload de filtres d'une alerte ADVERT est très proche de celui d'un search property — la structure d'une zone est identique, mais la **cardinalité diffère** : côté Property, `location` est un **tableau** (multi-zones combinées en `OR`) ; côté Advert, `location` est un **objet unique**. D'autres clés racine peuvent également différer. Il n'existe pas d'endpoint search ADVERT public ; les annonces brutes passent toujours par une alerte webhook.

Chaque sous-objet est optionnel ; les filtres absents ne contraignent pas le résultat. Tous les filtres top-level sont combinés en `AND` logique. Quand un filtre prend une **array d'objets** (ex. côté Property : `location[]`, `offer[]`), les éléments de l'array sont combinés en `OR`. Côté Advert, `location` est un **objet unique** → pas de `OR` possible sur les zones.

<Warning>
  **Complétude des annonces variable.** Selon les annonceurs, certains champs sont fréquemment renseignés (prix, surface, ville, type), d'autres rarement (nombre de toilettes, étage, exposition, équipements rares). **Plus vous filtrez sur des champs rares, plus vous risquez d'écarter des biens pertinents.** Privilégiez d'abord les filtres essentiels et n'affinez qu'au besoin.
</Warning>

## `location[]` — zones géographiques

`location` est un **tableau** : plusieurs zones sont combinées en `OR` (ex. Paris OU 92 OU 93). Chaque entrée accepte exactement **un** des modes ci-dessous.

| Mode                                | Type             | Exemple                     |
| ----------------------------------- | ---------------- | --------------------------- |
| `postalCode`                        | string           | `"75011"`                   |
| `inseeCode`                         | string           | `"75056"`                   |
| `department`                        | string (2 chars) | `"75"`                      |
| `city`                              | string           | ⚠️ **ignoré** par le moteur |
| `locationCoordinate.geoBoundingBox` | objet            | bbox carte                  |
| `locationCoordinate.geoDistance`    | objet            | rayon autour d'un point     |

Détails complets, exemples par mode et logique multi-zones : [Recherche géographique](/concepts/recherche-geographique).

<Snippet file="/snippets/warning-city-deprecated.mdx" />

```json theme={null}
{ "location": [{ "postalCode": "75011" }, { "department": "92" }] }
```

## `offer[].type` — type d'offre

`offer` est un tableau. Le champ `type` est un enum :

| Valeur                     | Sens                         |
| -------------------------- | ---------------------------- |
| `OFFER_BUY`                | Vente                        |
| `OFFER_RENT`               | Location                     |
| `OFFER_LIFE_ANNUITY_SALE`  | Viager                       |
| `OFFER_HOLIDAYS`           | Location vacances            |
| `OFFER_AUCTION`            | Vente aux enchères           |
| `OFFER_BUSINESS_TAKE_OVER` | Reprise de fonds de commerce |
| `OFFER_LEASE_BACK`         | Lease-back                   |
| `OFFER_UNKNOWN`            | Inconnu (à éviter)           |

```json theme={null}
{ "offer": [{ "type": "OFFER_BUY" }] }
```

## `price` — prix

| Champ                                     | Type | Sens                                               |
| ----------------------------------------- | ---- | -------------------------------------------------- |
| `price.initial.value.min` / `.max`        | int  | Range du prix initial (à la première publication). |
| `price.latest.value.min` / `.max`         | int  | Range du prix courant (le plus récent).            |
| `price.initial.valuePerArea.min` / `.max` | int  | Prix au m² initial.                                |
| `price.latest.valuePerArea.min` / `.max`  | int  | Prix au m² courant.                                |

```json theme={null}
{ "price": { "latest": { "value": { "min": 200000, "max": 450000 } } } }
```

## `habitation` — caractéristiques du logement

| Champ                                   | Type     |
| --------------------------------------- | -------- |
| `habitation.surface.total.min` / `.max` | int (m²) |
| `habitation.bedroomCount.min` / `.max`  | int      |
| `habitation.roomCount.min` / `.max`     | int      |
| `habitation.bathroomCount.min` / `.max` | int      |
| `habitation.wcCount.min` / `.max`       | int      |
| `habitation.propertyCondition[]`        | array    |

Note : `habitation.floor` n'est pas un champ direct du DTO — il fait partie de `habitation.characteristics` ou `habitation.features` selon le modèle. Utilisez `surface`, `bedroomCount`, `roomCount` pour les filtres usuels.

```json theme={null}
{
  "habitation": {
    "surface": { "total": { "min": 40, "max": 80 } },
    "bedroomCount": { "min": 2 },
    "roomCount": { "min": 3 }
  }
}
```

## `type[]` — classe de bien

Tableau d'enum `EnumPropertyClassDto` :

| Valeur           | Sens                      |
| ---------------- | ------------------------- |
| `CLASS_FLAT`     | Appartement               |
| `CLASS_HOUSE`    | Maison                    |
| `CLASS_PROGRAM`  | Programme neuf            |
| `CLASS_LAND`     | Terrain                   |
| `CLASS_PARKING`  | Parking / box             |
| `CLASS_OFFICE`   | Bureau                    |
| `CLASS_SHOP`     | Local commercial          |
| `CLASS_PREMISES` | Local pro / professionnel |
| `CLASS_BUILDING` | Immeuble                  |
| `CLASS_ROOM`     | Chambre                   |
| `CLASS_OTHER`    | Autre                     |
| `CLASS_UNKNOWN`  | Inconnu (à éviter)        |

```json theme={null}
{ "type": ["CLASS_FLAT", "CLASS_HOUSE"] }
```

## `meta` — métadonnées de cycle de vie

| Champ                   | Type       | Sens                                                                                                                       |
| ----------------------- | ---------- | -------------------------------------------------------------------------------------------------------------------------- |
| `meta.isTotallyOffline` | boolean    | `false` = exclure les biens dont **toutes** les adverts sont offline. Très utile pour ne voir que des biens encore actifs. |
| `meta.firstSeenAt`      | range date | Première fois que Fluximmo a vu le bien (`min` / `max` ISO 8601).                                                          |
| `meta.lastSeenAt`       | range date | Dernière fois que Fluximmo a vu le bien.                                                                                   |

```json theme={null}
{
  "meta": {
    "isTotallyOffline": false,
    "firstSeenAt": { "min": "2025-01-01T00:00:00Z" }
  }
}
```

## Filtres spécifiques Adverts (alerte)

Au-delà des filtres communs ci-dessus, les alertes ADVERTS exposent : `isOnline` (équivalent advert de `meta.isTotallyOffline` côté property), `isPro`, `isExclusive`, `source` (portail d'origine), `seller[]`, `firstSeenAt`. Voir [Advert — modèle complet](/api-v2-reference/_api-models/advert).

## Pour aller plus loin

* [Recherche géographique](/concepts/recherche-geographique) — détail des modes de zone et multi-zones OR.
* [Property — modèle complet](/api-v2-reference/_api-models/property)
* [Advert — modèle complet](/api-v2-reference/_api-models/advert)
* [Search Properties](/api-v2-reference/properties-search/search-properties)
