> ## 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.

# Modèle Property

> Schéma complet d'une property — bien physique unique avec déduplication multi-portails.

Une **Property** = bien physique unique. Agrégation de N adverts (annonces sur N portails) après déduplication. C'est l'objet à utiliser pour l'analytique, la valorisation et la vue dédupliquée d'un bien.

```mermaid theme={null}
flowchart LR
  A1["Advert · portail A"] --> P[("Property · flxId")]
  A2["Advert · portail B"] --> P
  A3["Advert · portail C"] --> P
  P --> R["1 vue unique<br/>du bien"]
```

## Champs principaux

Le schéma OpenAPI complet est rendu plus bas par Mintlify (`PropertyDto`). Ce tableau décrit les champs porteurs de sens métier.

| Champ         | Type                  | Description                                                                                                                                                                                                      |
| ------------- | --------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `flxId`       | `string`              | Identifiant unique Fluximmo de la property.                                                                                                                                                                      |
| `type`        | `enum`                | `CLASS_FLAT`, `CLASS_HOUSE`, `CLASS_PROGRAM`, `CLASS_LAND`, `CLASS_PARKING`, `CLASS_OFFICE`, `CLASS_SHOP`, `CLASS_BUILDING`, `CLASS_PREMISES`, `CLASS_ROOM`, `CLASS_OTHER`, `CLASS_UNKNOWN`.                     |
| `title`       | `string`              | Par défaut : titre de la première advert.                                                                                                                                                                        |
| `description` | `string`              | Par défaut : description de la première advert.                                                                                                                                                                  |
| `offer`       | `OfferDto`            | `{ type, isCurrentlyOccupied, renting }` — `type` ∈ `OFFER_BUY`, `OFFER_RENT`, `OFFER_LIFE_ANNUITY_SALE`, `OFFER_HOLIDAYS`, `OFFER_AUCTION`, `OFFER_BUSINESS_TAKE_OVER`, `OFFER_LEASE_BACK`, `OFFER_UNKNOWN`.    |
| `price`       | `PriceDto`            | `{ initial, latest, variation, currency, scope, charges, isAuction, warrantyDeposit }`. `initial` = prix de la première advert ; `latest` = prix de la dernière. `scope` ∈ `PRICING_ONE_OFF`, `PRICING_MENSUAL`. |
| `location`    | `LocationDto`         | `{ city, postalCode, inseeCode, irisCode, department, cityCoordinate, locationCoordinate }`. Coordonnées au format `{ location: [lng, lat] }` (GeoJSON).                                                         |
| `habitation`  | `TypeHabitationDto`   | `{ surface: { total, balconies, terraces, ... } (m²), roomCount, bedroomCount, bathroomCount, wcCount, type, characteristics, climate (DPE/GES), features, propertyCondition }`.                                 |
| `land`        | `TypeLandDto`         | Détails terrain (surface, etc.).                                                                                                                                                                                 |
| `parking`     | `TypeParkingDto`      | Détails parking.                                                                                                                                                                                                 |
| `medias`      | `MediasDto`           | Photos / médias agrégés depuis les adverts.                                                                                                                                                                      |
| `meta`        | `MetaDto`             | `{ firstSeenAt, lastSeenAt, lastUpdatedAt, lastPublishedAt, isTotallyOffline, totallyOfflineAt }` — voir ci-dessous.                                                                                             |
| `adverts`     | `PropertyAdvertDto[]` | Liste des adverts constituantes (présent selon endpoint, peut être tronqué).                                                                                                                                     |
| `tags`        | `string[]`            | Tags non structurés.                                                                                                                                                                                             |
| `hasAnomaly`  | `boolean`             | Une incohérence a été détectée.                                                                                                                                                                                  |
| `isUrgent`    | `boolean`             | Property marquée urgent.                                                                                                                                                                                         |

### `meta.isTotallyOffline` (champ clé en prod)

`true` ⇔ toutes les adverts associées sont offline (bien vendu, retiré, loué). Filtre standard côté search :

```json theme={null}
{ "meta": { "isTotallyOffline": false } }
```

→ exclut les biens hors ligne. Pour suivre le moment où un bien est passé totalement offline, utilisez `meta.totallyOfflineAt`.

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

## JSON exemple

Extrait minimal — tous les champs ne sont pas affichés.

```json theme={null}
{
  "flxId": "prop_01HXY...",
  "type": "CLASS_FLAT",
  "title": "Appartement T3 lumineux 70m²",
  "offer": { "type": "OFFER_BUY", "isCurrentlyOccupied": false },
  "price": {
    "currency": "CURRENCY_EUR",
    "scope": "PRICING_ONE_OFF",
    "initial": { "value": 450000, "valuePerArea": 6428 },
    "latest":  { "value": 435000, "valuePerArea": 6214 }
  },
  "location": {
    "postalCode": "75011",
    "inseeCode": "75111",
    "department": "75",
    "city": "Paris",
    "locationCoordinate": { "location": [2.376, 48.857] }
  },
  "habitation": {
    "surface": { "total": 70 },
    "roomCount": 3,
    "bedroomCount": 2,
    "climate": { "epcEnergy": "ENERGY_CLASSIFICATION_C", "epcClimate": "GREENHOUSE_CLASSIFICATION_B" }
  },
  "meta": {
    "firstSeenAt": "2025-01-12T08:14:21.000Z",
    "lastSeenAt":  "2025-04-30T11:02:08.000Z",
    "isTotallyOffline": false
  },
  "adverts": [ /* PropertyAdvertDto[] — voir endpoint dédié */ ]
}
```

Pour un échantillon **live** (jeu de données réel servant de bac à sable), utilisez `GET /v2/sample/properties` — voir [Sample data](/demarrer/sample-data).

## Différences clés vs Advert

<Snippet file="decision-matrix-property-vs-advert.mdx" />

Pour les détails conceptuels (déduplication, parent-enfant, choix d'endpoint) : [Property vs Advert](/concepts/property-vs-advert).

## Cas d'usage

**Analytique multi-portails.** Une property = 1 ligne par bien réel. Idéal pour comptages, pricing moyen, distribution géographique sans gonfler les chiffres avec les doublons inter-portails.

**Déduplication.** L'agrégation est faite par Fluximmo (matching titre/prix/géo/médias/seller). Vous lisez un bien unique, sans avoir à dédupliquer côté client.

**Estimation / AVM.** `price.initial` vs `price.latest` + `price.variation` donnent la trajectoire de prix observée. Couplé à `meta.isTotallyOffline=true` + `totallyOfflineAt`, vous reconstituez les prix de transaction observables.

## Endpoints associés

* [`POST /v2/protected/properties/search`](/api-v2-reference/properties-search/search-properties) — recherche dédupliquée.
* [`GET /v2/protected/properties/{flxId}`](/api-v2-reference/properties/get-a-property-by-its-flx_id) — fetch d'une property par son flxId (utile après webhook).
* [Match types & cycle alerte](/concepts/match-types-cycle-alerte) — events `CREATED`, `MERGED` côté property.
