DVF Open Data - principaux endpoints

Permet d'interroger les mutations DVF+ et leurs géométries.

📂 dvf_opendata.mutations

Description

Retourne les mutations issues de DVF+ pour la commune ou l'emprise rectangulaire demandée.

Parameters:

Name Type Description Default
code_insee (str, optionnel)

Code INSEE de la commune.

None
codes_insee (List[str], optionnel)

Liste de codes INSEE.

None
in_bbox (List[float], optionnel)

[min_lon, min_lat, max_lon, max_lat].

None
lon_lat (List[float], optionnel)

[longitude, latitude].

None
contains_lon_lat (List[float], optionnel)

[longitude, latitude] pour filtrer par point contenu dans l'emprise.

None
anneemut (str, optionnel)

Année de la mutation au format YYYY.

None
anneemut_min (str, optionnel)

Année de mutation minimale au format YYYY.

None
anneemut_max (str, optionnel)

Année de mutation maximale au format YYYY.

None
codtypbien (str, optionnel)

Code du type de bien.

None
idnatmut (str, optionnel)

Identifiant national de la mutation.

None
vefa (str, optionnel)

Statut VEFA (Vente en l'État Futur d'Achèvement).

None
sbati_min (float, optionnel)

Superficie bâtie minimale.

None
sbati_max (float, optionnel)

Superficie bâtie maximale.

None
sterr_min (float, optionnel)

Superficie terrain minimale.

None
sterr_max (float, optionnel)

Superficie terrain maximale.

None
valeurfonc_min (float, optionnel)

Valeur foncière minimale.

None
valeurfonc_max (float, optionnel)

Valeur foncière maximale.

None
fields (str, optionnel)

'all' pour obtenir tous les champs, None sinon.

None
ordering (str, optionnel)

Critère de tri des résultats.

None
page (int, optionnel)

Numéro de la page pour la pagination.

None
page_size (int, optionnel)

Nombre de résultats par page.

500
paginate (bool, optionnel)

Activer la pagination ou non.

True
format_output (str, optionnel)

Format de sortie ('dataframe' ou 'dict').

'dataframe'

Returns:

Type Description
Union[DataFrame, List[dict]]

DataFrame ou liste de dictionnaires des mutations.

Source code in apifoncier\endpoints\dvf_opendata.py
def mutations(
    self,
    code_insee: Optional[str] = None,
    codes_insee: Optional[List[str]] = None,
    in_bbox: Optional[List[float]] = None,
    lon_lat: Optional[List[float]] = None,
    contains_lon_lat: Optional[List[float]] = None,
    anneemut: Optional[str] = None,
    anneemut_min: Optional[str] = None,
    anneemut_max: Optional[str] = None,
    codtypbien: Optional[str] = None,
    idnatmut: Optional[str] = None,
    vefa: Optional[str] = None,
    sbati_min: Optional[float] = None,
    sbati_max: Optional[float] = None,
    sterr_min: Optional[float] = None,
    sterr_max: Optional[float] = None,
    valeurfonc_min: Optional[float] = None,
    valeurfonc_max: Optional[float] = None,
    fields: Optional[str] = None,
    ordering: Optional[str] = None,
    page: Optional[int] = None,
    page_size: Optional[int] = 500,
    paginate: bool = True,
    format_output: str = "dataframe",
) -> Union[pd.DataFrame, List[dict]]:
    """
    Retourne les mutations issues de DVF+ pour la commune ou l'emprise rectangulaire demandée.

    Args:
        code_insee (str, optionnel): Code INSEE de la commune.
        codes_insee (List[str], optionnel): Liste de codes INSEE.
        in_bbox (List[float], optionnel): [min_lon, min_lat, max_lon, max_lat].
        lon_lat (List[float], optionnel): [longitude, latitude].
        contains_lon_lat (List[float], optionnel): [longitude, latitude] pour filtrer par point contenu dans l'emprise.
        anneemut (str, optionnel): Année de la mutation au format YYYY.
        anneemut_min (str, optionnel): Année de mutation minimale au format YYYY.
        anneemut_max (str, optionnel): Année de mutation maximale au format YYYY.
        codtypbien (str, optionnel): Code du type de bien.
        idnatmut (str, optionnel): Identifiant national de la mutation.
        vefa (str, optionnel): Statut VEFA (Vente en l'État Futur d'Achèvement).
        sbati_min (float, optionnel): Superficie bâtie minimale.
        sbati_max (float, optionnel): Superficie bâtie maximale.
        sterr_min (float, optionnel): Superficie terrain minimale.
        sterr_max (float, optionnel): Superficie terrain maximale.
        valeurfonc_min (float, optionnel): Valeur foncière minimale.
        valeurfonc_max (float, optionnel): Valeur foncière maximale.
        fields (str, optionnel): 'all' pour obtenir tous les champs, None sinon.
        ordering (str, optionnel): Critère de tri des résultats.
        page (int, optionnel): Numéro de la page pour la pagination.
        page_size (int, optionnel): Nombre de résultats par page.
        paginate (bool, optionnel): Activer la pagination ou non.
        format_output (str, optionnel): Format de sortie ('dataframe' ou 'dict').

    Returns:
        DataFrame ou liste de dictionnaires des mutations.
    """

    # Validation des paramètres de localisation avec mutualisation
    checked_codes_insee, bbox_result, auto_contains_geom = (
        self._validate_location_params(
            code_insee=code_insee,
            codes_insee=codes_insee,
            coddep=None,
            in_bbox=in_bbox,
            lon_lat=lon_lat,
            contains_lon_lat=contains_lon_lat,
            max_bbox_size=0.02,
            max_codes=10,
        )
    )

    # Construction des paramètres
    params = self._build_params(
        code_insee=checked_codes_insee,
        in_bbox=",".join(map(str, bbox_result)) if bbox_result else None,
        anneemut=anneemut,
        anneemut_min=anneemut_min,
        anneemut_max=anneemut_max,
        contains_geom=auto_contains_geom,
        codtypbien=codtypbien,
        idnatmut=idnatmut,
        vefa=vefa,
        sbati_min=sbati_min,
        sbati_max=sbati_max,
        sterr_min=sterr_min,
        sterr_max=sterr_max,
        valeurfonc_min=valeurfonc_min,
        valeurfonc_max=valeurfonc_max,
        fields=fields,
        ordering=ordering,
        page=page,
        page_size=page_size,
    )

    return self._fetch(
        endpoint="/dvf_opendata/mutations",
        params=params,
        format_output=format_output,
        geo=False,
        paginate=paginate,
    )

Exemple d'utilisation

  • Interroger les mutations DVF+ pour une commune donnée (ici, via le code INSEE 59001) :
from apifoncier import ApiFoncierClient

client = ApiFoncierClient()
mutations = client.dvf_opendata.mutations(code_insee="59001")
  • Interroger les mutations DVF+ dans une emprise geographique (ici, un rectangle défini par ses coordonnées) :
client = ApiFoncierClient()
mutations = client.dvf_opendata.mutations(in_bbox=[2.76, 49.73, 2.779, 49.749])
  • Interroger les mutations DVF+ pour une commune donnée (ici, via le code INSEE 59350) en 2022, pour des biens de type maison (codtypbien=111) et dont la surface est comprise entre 1000 et 5000 m2, en récupérant tous les champs disponibles :
client.dvf_opendata.mutations(
    code_insee="59350",
    anneemut="2022",
    fields="all",
    sterr_min=1000,
    sterr_max=5000,
    codtypbien="111",
)

📂 dvf_opendata.geomutations

Description

Retourne, en GeoJSON, les mutations issues de DVF+ pour la commune ou l'emprise rectangulaire demandée.

Parameters:

Name Type Description Default
code_insee (str, optionnel)

Code INSEE de la commune.

None
codes_insee (List[str], optionnel)

Liste de codes INSEE.

None
in_bbox (List[float], optionnel)

[min_lon, min_lat, max_lon, max_lat].

None
lon_lat (List[float], optionnel)

[longitude, latitude].

None
contains_lon_lat (List[float], optionnel)

[longitude, latitude] pour filtrer par point contenu dans l'emprise.

None
anneemut (str, optionnel)

Année de la mutation au format YYYY.

None
anneemut_min (str, optionnel)

Année de mutation minimale au format YYYY.

None
anneemut_max (str, optionnel)

Année de mutation maximale au format YYYY.

None
codtypbien (str, optionnel)

Code du type de bien.

None
idnatmut (str, optionnel)

Identifiant national de la mutation.

None
vefa (str, optionnel)

Statut VEFA (Vente en l'État Futur d'Achèvement).

None
sbati_min (float, optionnel)

Superficie bâtie minimale.

None
sbati_max (float, optionnel)

Superficie bâtie maximale.

None
sterr_min (float, optionnel)

Superficie terrain minimale.

None
sterr_max (float, optionnel)

Superficie terrain maximale.

None
valeurfonc_min (float, optionnel)

Valeur foncière minimale.

None
valeurfonc_max (float, optionnel)

Valeur foncière maximale.

None
fields (str, optionnel)

'all' pour obtenir tous les champs, None sinon.

None
ordering (str, optionnel)

Critère de tri des résultats.

None
page (int, optionnel)

Numéro de la page pour la pagination.

None
page_size (int, optionnel)

Nombre de résultats par page.

500
paginate (bool, optionnel)

Activer la pagination ou non.

True
format_output (str, optionnel)

Format de sortie ('dataframe' ou 'dict').

'dataframe'

Returns:

Type Description
Union[GeoDataFrame, List[dict]]

GeoDataFrame ou liste de dictionnaires des mutations géolocalisées.

Source code in apifoncier\endpoints\dvf_opendata.py
def geomutations(
    self,
    code_insee: Optional[str] = None,
    codes_insee: Optional[List[str]] = None,
    in_bbox: Optional[List[float]] = None,
    lon_lat: Optional[List[float]] = None,
    contains_lon_lat: Optional[List[float]] = None,
    anneemut: Optional[str] = None,
    anneemut_min: Optional[str] = None,
    anneemut_max: Optional[str] = None,
    codtypbien: Optional[str] = None,
    idnatmut: Optional[str] = None,
    vefa: Optional[str] = None,
    sbati_min: Optional[float] = None,
    sbati_max: Optional[float] = None,
    sterr_min: Optional[float] = None,
    sterr_max: Optional[float] = None,
    valeurfonc_min: Optional[float] = None,
    valeurfonc_max: Optional[float] = None,
    fields: Optional[str] = None,
    ordering: Optional[str] = None,
    page: Optional[int] = None,
    page_size: Optional[int] = 500,
    paginate: bool = True,
    format_output: str = "dataframe",
) -> Union[gpd.GeoDataFrame, List[dict]]:
    """
    Retourne, en GeoJSON, les mutations issues de DVF+ pour la commune ou l'emprise rectangulaire demandée.

    Args:
        code_insee (str, optionnel): Code INSEE de la commune.
        codes_insee (List[str], optionnel): Liste de codes INSEE.
        in_bbox (List[float], optionnel): [min_lon, min_lat, max_lon, max_lat].
        lon_lat (List[float], optionnel): [longitude, latitude].
        contains_lon_lat (List[float], optionnel): [longitude, latitude] pour filtrer par point contenu dans l'emprise.
        anneemut (str, optionnel): Année de la mutation au format YYYY.
        anneemut_min (str, optionnel): Année de mutation minimale au format YYYY.
        anneemut_max (str, optionnel): Année de mutation maximale au format YYYY.
        codtypbien (str, optionnel): Code du type de bien.
        idnatmut (str, optionnel): Identifiant national de la mutation.
        vefa (str, optionnel): Statut VEFA (Vente en l'État Futur d'Achèvement).
        sbati_min (float, optionnel): Superficie bâtie minimale.
        sbati_max (float, optionnel): Superficie bâtie maximale.
        sterr_min (float, optionnel): Superficie terrain minimale.
        sterr_max (float, optionnel): Superficie terrain maximale.
        valeurfonc_min (float, optionnel): Valeur foncière minimale.
        valeurfonc_max (float, optionnel): Valeur foncière maximale.
        fields (str, optionnel): 'all' pour obtenir tous les champs, None sinon.
        ordering (str, optionnel): Critère de tri des résultats.
        page (int, optionnel): Numéro de la page pour la pagination.
        page_size (int, optionnel): Nombre de résultats par page.
        paginate (bool, optionnel): Activer la pagination ou non.
        format_output (str, optionnel): Format de sortie ('dataframe' ou 'dict').

    Returns:
        GeoDataFrame ou liste de dictionnaires des mutations géolocalisées.
    """

    # Validation des paramètres de localisation avec mutualisation
    checked_codes_insee, bbox_result, auto_contains_geom = (
        self._validate_location_params(
            code_insee=code_insee,
            codes_insee=codes_insee,
            coddep=None,
            in_bbox=in_bbox,
            lon_lat=lon_lat,
            contains_lon_lat=contains_lon_lat,
            max_bbox_size=0.02,
            max_codes=10,
        )
    )

    # Construction des paramètres
    params = self._build_params(
        code_insee=checked_codes_insee,
        in_bbox=",".join(map(str, bbox_result)) if bbox_result else None,
        anneemut=anneemut,
        anneemut_min=anneemut_min,
        anneemut_max=anneemut_max,
        contains_geom=auto_contains_geom,
        codtypbien=codtypbien,
        idnatmut=idnatmut,
        vefa=vefa,
        sbati_min=sbati_min,
        sbati_max=sbati_max,
        sterr_min=sterr_min,
        sterr_max=sterr_max,
        valeurfonc_min=valeurfonc_min,
        valeurfonc_max=valeurfonc_max,
        fields=fields,
        ordering=ordering,
        page=page,
        page_size=page_size,
    )

    return self._fetch(
        endpoint="/dvf_opendata/geomutations",
        params=params,
        format_output=format_output,
        geo=True,
        paginate=paginate,
    )

Exemple d'utilisation

  • Interroger, sous forme d'un geodataframe, les mutations DVF+ pour une commune donnée (ici, via le code INSEE 59001) :
from apifoncier import ApiFoncierClient

client = ApiFoncierClient()
client.dvf_opendata.geomutations(code_insee="59001")
  • Interroger, sous forme d'un geodataframe, les mutations DVF+ pour plusieurs communes (ici, via les codes INSEE 59350 et 59009), en 2023, pour des biens de type appartement (codtypbien=121) et dont la surface bâtie est supérieure à 100 m2 :
client.dvf_opendata.geomutations(
    codes_insee=["59350", "59009"],
    sbati_min=100,
    anneemut=2023,
    codtypbien="121",
)

Paramètres d’affichage

Choisissez un thème pour personnaliser l’apparence du site.