Skip to main content
Recherche DVF
curl --request POST \
  --url https://api.fluximmo.io/v2/protected/opendata/dvf/search \
  --header 'Content-Type: application/json' \
  --header 'x-api-key: <api-key>' \
  --data '
{
  "filters": {
    "id": "2014-871319",
    "transaction_date": {
      "from": "2023-09-15"
    },
    "transaction_type": [
      "Vente"
    ],
    "price_eur": {
      "min": 265788
    },
    "price_per_m2_living_eur": {
      "min": 3819
    },
    "price_per_m2_land_eur": {
      "min": 171
    },
    "location": {
      "lat": 48.8566,
      "lon": 2.3522,
      "distance": "10km"
    },
    "departement_code": "83",
    "insee_code": "83137",
    "postal_code": "83000",
    "iris_code": "830680000",
    "iris_type": [
      "H"
    ],
    "property_type": [
      "Appartement"
    ],
    "surface_m2": {
      "min": 476
    },
    "main_rooms": {
      "min": 3
    },
    "land_surface_m2": {
      "min": 1288
    },
    "is_new_build": false,
    "is_open_market": true,
    "carrez_surface_m2": {
      "min": 57.8
    },
    "soil_surface_m2": {
      "min": 185
    },
    "garden_surface_m2": {
      "min": 164
    }
  },
  "sortBy": "id",
  "sortOrder": "asc",
  "size": 20,
  "cursor": "<string>"
}
'
{
  "data": [
    {
      "id": "2014-871319",
      "transaction_date": "2023-09-15",
      "transaction_type": "Vente",
      "price_eur": 265788,
      "price_per_m2_living_eur": 3819,
      "price_per_m2_land_eur": 171,
      "location": {
        "lat": 48.8566,
        "lon": 2.3522
      },
      "departement_code": "83",
      "insee_code": "83137",
      "postal_code": "83000",
      "city_name": "<string>",
      "street_number": "9001",
      "street_name": "<string>",
      "address": "<string>",
      "iris_code": "830680000",
      "iris_name": "<string>",
      "iris_type": "H",
      "property_type": "Appartement",
      "surface_m2": 476,
      "main_rooms": 3,
      "transaction_class": "logement_sans_terrain",
      "land_surface_m2": 1288,
      "parcel_count": 1,
      "housing_count": 1,
      "house_count": 0,
      "apartment_count": 0,
      "outbuilding_count": 1,
      "commercial_count": 0,
      "is_new_build": false,
      "is_open_market": true,
      "carrez_surface_m2": 57.8,
      "soil_surface_m2": 185,
      "garden_surface_m2": 164
    }
  ],
  "total": 123,
  "size": 123,
  "hasMore": true,
  "cursor": "<string>",
  "from": 123
}

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.

À quoi ça sert

POST /v2/protected/opendata/dvf/search interroge la base DVF (Demandes de Valeurs Foncières), qui recense les transactions immobilières issues des actes notariés. Vous fournissez des filters (localisation, type de bien, type de mutation, fourchettes de prix et de surface, date) et l’endpoint retourne les mutations correspondantes, triées et paginées. C’est un endpoint de recherche brute : il renvoie les transactions telles qu’elles existent dans DVF, sans scoring ni pondération. Si vous cherchez les ventes les plus comparables à un bien donné (avec un score de similarité), utilisez plutôt /dvf/match. La pagination est par curseur : reprenez le champ cursor de la réponse pour obtenir la page suivante.

Payload

ChampTypeObligatoireSens
filtersobjetNonCritères de recherche en snake_case (voir ci-dessous). Sans filters, la recherche porte sur l’ensemble des transactions.
sortByenumNonChamp de tri : id, transaction_date, price_eur, price_per_m2_living_eur, price_per_m2_land_eur, surface_m2.
sortOrderenumNonasc ou desc.
sizeintegerNonTaille de page, entre 1 et 100 (défaut 20).
cursorstringNonCurseur de pagination renvoyé par la réponse précédente.

Champs de filters

ChampTypeSens
idstringIdentifiant unique d’une mutation DVF.
transaction_date{ from, to }Plage de dates (ISO). from = date minimale, to = date maximale ; les deux sont optionnelles.
transaction_typestring[]Nature de la mutation. Valeurs : Vente, Vente en l'etat futur d'achevement, Vente terrain a batir, Echange.
price_eur{ min, max }Fourchette du prix de transaction en euros.
price_per_m2_living_eur{ min, max }Fourchette du prix au m² de surface habitable.
price_per_m2_land_eur{ min, max }Fourchette du prix au m² de terrain.
location{ lat, lon, distance }Recherche géographique autour d’un point. distance au format 10km, 500m, 2mi, etc. Les trois champs sont requis ensemble.
departement_codestringCode département (2-3 caractères, ex : 75, 2A, 974).
insee_codestringCode INSEE de la commune (5 caractères).
postal_codestringCode postal (5 chiffres).
iris_codestringCode IRIS (9 chiffres).
iris_typestring[]Type d’IRIS : H (habitat), Z (zone), A (activité), D (divers).
property_typestring[]Type de bien : Appartement, Maison, Autre, Terrain, Tertiaire, Dépendance, Volume.
surface_m2{ min, max }Fourchette de surface habitable principale en m².
main_rooms{ min, max }Fourchette du nombre de pièces principales.
land_surface_m2{ min, max }Fourchette de surface de terrain en m².
is_new_buildbooleanLogement neuf (VEFA ou première vente).
is_open_marketbooleanTransaction sur le marché libre (hors adjudication/expropriation).
carrez_surface_m2{ min, max }Fourchette de surface loi Carrez en m².
soil_surface_m2{ min, max }Fourchette de surface au sol du bâti en m².
garden_surface_m2{ min, max }Fourchette de surface de jardin en m².

Réponse

L’API retourne une enveloppe paginée :
ChampTypeSens
dataobjet[]Liste des mutations DVF correspondant aux filtres.
totalintegerNombre total de transactions correspondant à la recherche.
sizeintegerTaille de page effective.
hasMorebooleantrue s’il reste des résultats à paginer.
cursorstringCurseur à réinjecter dans le champ cursor du payload pour la page suivante.
Chaque élément de data contient notamment id, transaction_date, transaction_type, price_eur, price_per_m2_living_eur, property_type, surface_m2, main_rooms, departement_code, insee_code, postal_code, location et is_new_build. Le contrat exact est documenté plus bas par le bloc OpenAPI.

Exemple

Appartements vendus à Toulon, du plus cher au moins cher

curl -X POST https://api.fluximmo.io/v2/protected/opendata/dvf/search \
  -H "x-api-key: $FLUXIMMO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "filters": {
      "departement_code": "83",
      "postal_code": "83000",
      "property_type": ["Appartement"],
      "transaction_type": ["Vente"],
      "transaction_date": { "from": "2023-01-01", "to": "2024-12-31" }
    },
    "sortBy": "price_eur",
    "sortOrder": "desc",
    "size": 5
  }'

Appartements neufs en VEFA, triés par prix au m² habitable

curl -X POST https://api.fluximmo.io/v2/protected/opendata/dvf/search \
  -H "x-api-key: $FLUXIMMO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "filters": {
      "departement_code": "83",
      "transaction_type": ["Vente en l'\''etat futur d'\''achevement"],
      "is_new_build": true,
      "property_type": ["Appartement"]
    },
    "sortBy": "price_per_m2_living_eur",
    "sortOrder": "asc",
    "size": 20
  }'
La valeur Vente en l'etat futur d'achevement contient deux apostrophes. En shell, échappez-les comme dans l’exemple ('\'') ou utilisez un fichier JSON via -d @payload.json.

Recherche géographique autour d’un point

curl -X POST https://api.fluximmo.io/v2/protected/opendata/dvf/search \
  -H "x-api-key: $FLUXIMMO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "filters": {
      "location": { "lat": 43.1242, "lon": 5.928, "distance": "5km" },
      "property_type": ["Maison"],
      "surface_m2": { "min": 80, "max": 200 },
      "price_eur": { "min": 200000, "max": 600000 }
    },
    "sortBy": "transaction_date",
    "sortOrder": "desc",
    "size": 10
  }'

Liens utiles

  • Match DVF à un bien immobilier — pour obtenir les transactions les plus comparables à un bien, avec score de similarité.
  • DVF vs Fluximmo — différences entre les transactions notariées DVF et les annonces du marché Fluximmo.

Clé test gratuite — 1 semaine

Créez un compte sur my.fluximmo.io pour récupérer une clé API test gratuite (1 semaine, accès limité). Aucun paiement requis.

Authorizations

x-api-key
string
header
required

Body

application/json
filters
object
sortBy
enum<string>

Sort field

Available options:
id,
transaction_date,
price_eur,
price_per_m2_living_eur,
price_per_m2_land_eur,
surface_m2
sortOrder
enum<string>

Sort order

Available options:
asc,
desc
size
integer
default:20

Page size

Required range: 1 <= x <= 100
cursor
string

Cursor for pagination

Response

data
object[]
required
total
integer
required
size
integer
required
hasMore
boolean
required
cursor
string
from
integer