Documentation sur l'API · v1.0

Documentation publique sur l'API

Affichez vos annonces immobilières publiées sur n'importe quel site Web ou application. Public, en lecture seule, aucune authentification requise.

Aucune authentification
Point de terminaison public, aucune clé API requise
JSON RESTful
API REST standard renvoyant JSON

Point de terminaison

GEThttps://api.habiata.lu/public-properties/by-company/{companyId}

Paramètres de chemin

companyId

string (UUID) · Obligatoire

L'identifiant unique de l'entreprise dont vous souhaitez récupérer les propriétés publiées. Vous pouvez le trouver dans votre tableau de bord Habiata sous Intégrations.

Paramètres de requête

page

integer

Numéro de page pour la pagination (indexé 1).

Par défaut 1

limit

integer

Nombre de propriétés par page. Maximum 100.

Par défaut 20

portal

string

Portail depuis lequel lire les annonces publiées. Par défaut habiata, le site de l'agence (MY_HABIATA_WEBSITE), qui peut aussi être nommé explicitement. Une valeur inconnue renvoie 400.

Par défaut habiata

habiataathome.luwortimmo.luimmotopnextimmofiliaimmoweltle_figarokleinanzeigenwillhabenderstandardnewhomehomegatesrealityotodomingatlanimmowebselogerleboncoinkyerogreenacresproperstarjamesedition
search

string

Recherche en texte libre sur le titre, la description, l'adresse et la ville.

property_type

string

Filtrer par type de bien. Plusieurs valeurs séparées par des virgules (OU). Insensible à la casse. Voir la référence des types ci-dessous.

housedetached_housesemi_detachedterraced_housetownhousevillamansionfarmhousecountry_housechaletbungalowcottageapartmentstudiopenthouseduplextriplexloftmaisonetteattic_apartmentground_floornew_buildoff_planunder_constructionhouse_modelland_with_houseturnkey_projectinvestment_propertyrental_propertybuilding_landagricultural_landindustrial_landcommercial_landgarageparking_spacecarportunderground_parkingofficeoffice_buildingcoworking_spaceretail_spaceshopshopping_centershowroomrestaurantcafehotelbed_breakfastwarehousefactoryindustrial_unitlogistics_centerstorage_facilityhealthcareeducationalleisurereligiousutilitygas_stationcar_washworkshopcommerciallandother
transaction_type

string

Filtrer par sens de transaction ou cycle de vie. Valeurs séparées par des virgules (OU). buy et rent sont des familles ; sold et rented sont exclus sauf s'ils sont nommés explicitement ; passez off_market pour les annonces retirées/en pause uniquement.

buyrentnewvaluationothersous_compromisreservedsoldrentedoff_market
min_price

number

Prix minimum.

max_price

number

Prix maximum.

city

string

Noms de villes séparés par des virgules ; correspondance exacte, insensible à la casse.

canton

string

Filtrer par canton (insensible à la casse).

zip_code

string

Filtrer par code postal (insensible à la casse).

country

string

Filtrer par pays (insensible à la casse).

district

string

Noms de quartiers séparés par des virgules (ex. Limpertsberg,Hamm) ; correspondance exacte, insensible à la casse.

min_bedrooms

integer

Nombre minimal de chambres.

max_bedrooms

integer

Nombre maximal de chambres.

min_bathrooms

number

Nombre minimal de salles de bain.

min_area

number

Surface habitable minimale (dans l'unité du bien, généralement m²).

max_area

number

Surface habitable maximale (dans l'unité du bien, généralement m²).

min_land_area

number

Surface de terrain minimale (dans l'unité du bien, généralement m²).

max_land_area

number

Surface de terrain maximale (dans l'unité du bien, généralement m²).

min_year_built

integer

Année de construction minimale.

max_year_built

integer

Année de construction maximale.

min_floor_level

integer

Étage minimal de l'unité.

max_floor_level

integer

Étage maximal de l'unité.

min_garages

integer

Nombre minimal de garages (places en garages fermés et verrouillables).

min_indoor_parking_spaces

integer

Nombre minimal de places dans un parking couvert partagé.

min_outdoor_parking_spaces

integer

Nombre minimal de places extérieures.

min_carports

integer

Nombre minimal de carports (couverts, ouverts sur les côtés).

max_monthly_charges

number

Charges mensuelles maximales (utile pour les locations).

energy_class

string

Classes énergétiques séparées par des virgules (OU), insensible à la casse. Valeurs connues : A+, A, B, C, D, E, F, G, H, I.

A+ABCDEFGHI
environmental_class

string

Classes environnementales séparées par des virgules (OU), insensible à la casse.

thermal_insulation_class

string

Classes d'isolation thermique séparées par des virgules (OU), insensible à la casse.

heating_type

string

Types de chauffage séparés par des virgules (OU) ; correspondance partielle, insensible à la casse. Valeurs connues : gas, oil, electric, wood, pellet, solar, heat pump, geothermal, district.

gasoilelectricwoodpelletsolarheat pumpgeothermaldistrict
glazing_type

string

Types de vitrage séparés par des virgules (OU) ; correspondance partielle, insensible à la casse. Valeurs connues : simple, double, triple.

simpledoubletriple
construction_type

string

Types de construction séparés par des virgules (OU) ; correspondance partielle, insensible à la casse.

amenities

string

Clés d'équipement séparées par des virgules ; le bien doit avoir CHAQUE équipement listé (ET). Valeurs en snake_case minuscule, ex. air_conditioning.

pets_allowed

boolean

Filtrer les biens acceptant les animaux. Les filtres booléens acceptent true/false/1/0 et ne correspondent que si le flag est explicitement renseigné (null ne correspond jamais).

is_furnished

boolean

Filtrer les biens meublés.

has_elevator

boolean

Filtrer les biens avec ascenseur.

has_balcony

boolean

Filtrer les biens avec balcon.

has_garden

boolean

Filtrer les biens avec jardin.

has_terrace

boolean

Filtrer les biens avec terrasse.

has_separate_wc

boolean

Filtrer les biens avec WC séparé.

has_cave

boolean

Filtrer les biens avec cave.

has_wine_cellar

boolean

Filtrer les biens avec cave à vin.

has_attic

boolean

Filtrer les biens avec grenier.

has_solar_panels

boolean

Filtrer les biens avec panneaux solaires.

has_fireplace

boolean

Filtrer les biens avec cheminée.

has_underfloor_heating

boolean

Filtrer les biens avec chauffage au sol.

has_laundry_room

boolean

Filtrer les biens avec buanderie.

has_swimming_pool

boolean

Filtrer les biens avec piscine.

has_sauna

boolean

Filtrer les biens avec sauna.

has_hammam

boolean

Filtrer les biens avec hammam.

has_alarm

boolean

Filtrer les biens avec alarme.

has_intercom

boolean

Filtrer les biens avec interphone.

has_videophone

boolean

Filtrer les biens avec visiophone.

has_video_surveillance

boolean

Filtrer les biens avec vidéosurveillance.

featured

boolean

Filtrer les annonces mises en avant.

highlight

boolean

Filtrer les annonces highlight.

sort

string

Ordre de tri. Par défaut : l'ordre manuel de l'agence.

price_ascprice_descnewestoldest

Exemples de codes

Demande de base

curl "https://api.habiata.lu/public-properties/by-company/YOUR_COMPANY_ID?page=1&limit=20"

Avec filtres

# Filter by property type
curl "https://api.habiata.lu/public-properties/by-company/YOUR_COMPANY_ID?property_type=apartment"

# Filter by transaction type (buy/rent are families; sold/rented only when named)
curl "https://api.habiata.lu/public-properties/by-company/YOUR_COMPANY_ID?transaction_type=buy"
curl "https://api.habiata.lu/public-properties/by-company/YOUR_COMPANY_ID?transaction_type=sold,rented"

# Search properties
curl "https://api.habiata.lu/public-properties/by-company/YOUR_COMPANY_ID?search=Luxembourg&limit=10"

# Filter by district / quartier
curl "https://api.habiata.lu/public-properties/by-company/YOUR_COMPANY_ID?district=Limpertsberg,Hamm"

# Filter by portal (habiata, athome.lu, wortimmo.lu, immotop, nextimmo, filia)
curl "https://api.habiata.lu/public-properties/by-company/YOUR_COMPANY_ID?portal=nextimmo&page=1&limit=20"

Réponse

Exemple de réponse

200 OK
{
  "properties": [
    {
      "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
      "company_id": "YOUR_COMPANY_ID",
      "external_id": "REF-12345",
      "project_id": "proj-uuid-residence-du-parc",
      "project_name": "Résidence du Parc",
      "title": "Beautiful Apartment in Kirchberg",
      "titles": {
        "en": "Beautiful Apartment in Kirchberg",
        "fr": "Bel appartement à Kirchberg",
        "de": "Schöne Wohnung in Kirchberg"
      },
      "description": "Spacious 3-bedroom apartment with panoramic views...",
      "descriptions": {
        "en": "Spacious 3-bedroom apartment with panoramic views...",
        "fr": "Spacieux appartement de 3 chambres avec vue panoramique...",
        "de": "Geräumige 3-Zimmer-Wohnung mit Panoramablick..."
      },
      "property_type": "apartment",
      "transaction_type": "buy",
      "status": "active",
      "price": 850000,
      "room_count": 4,
      "bedrooms": 3,
      "bathrooms": 2,
      "area": 120,
      "area_unit": "sqm",
      "floor_level": 5,
      "address": "2 Rue du Fort Thüngen",
      "street": "Rue du Fort Thüngen",
      "house_number": "2",
      "city": "Luxembourg",
      "district": "Kirchberg",
      "zip_code": "1499",
      "country": "Luxembourg",
      "publish_address": true,
      "latitude": 49.6236,
      "longitude": 6.1469,
      "parcel_numbers": [
        "123/4567"
      ],
      "energy_class": "B",
      "indoor_parking_spaces": 1,
      "has_elevator": true,
      "monthly_charges": 250,
      "parking_fees": 35000,
      "available_from": "2026-11-01",
      "pet_policy": null,
      "virtual_tour_url": "https://my.matterport.com/show/?m=EXAMPLE",
      "highlighted_image": "https://cdn.habiata.lu/companies/YOUR_COMPANY_ID/living-room.jpg",
      "highlighted_image_128": "https://cdn.habiata.lu/image-variants/YOUR_COMPANY_ID/img-uuid/128.webp",
      "highlighted_image_480": "https://cdn.habiata.lu/image-variants/YOUR_COMPANY_ID/img-uuid/480.webp",
      "highlighted_image_1080": "https://cdn.habiata.lu/image-variants/YOUR_COMPANY_ID/img-uuid/1080.webp",
      "highlighted_image_1920": "https://cdn.habiata.lu/image-variants/YOUR_COMPANY_ID/img-uuid/1920.webp",
      "images": [
        {
          "url": "https://cdn.habiata.lu/companies/YOUR_COMPANY_ID/living-room.jpg",
          "url_128": "https://cdn.habiata.lu/image-variants/YOUR_COMPANY_ID/img-uuid/128.webp",
          "url_480": "https://cdn.habiata.lu/image-variants/YOUR_COMPANY_ID/img-uuid/480.webp",
          "url_1080": "https://cdn.habiata.lu/image-variants/YOUR_COMPANY_ID/img-uuid/1080.webp",
          "url_1920": "https://cdn.habiata.lu/image-variants/YOUR_COMPANY_ID/img-uuid/1920.webp",
          "is_main": true,
          "sort_order": 0,
          "caption": "Living room",
          "width": 4032,
          "height": 3024,
          "alt_text": "Bright living room with floor-to-ceiling windows",
          "focus_point": "50% 40%"
        }
      ],
      "nearby_places": [
        {
          "name": "Luxexpo tram stop",
          "category": "tram_stop",
          "distance": 350,
          "latitude": 49.6282,
          "longitude": 6.1641
        }
      ],
      "agents": [
        {
          "id": "agent-uuid",
          "name": "Alex Smith",
          "first_name": "Alex",
          "last_name": "Smith",
          "email": "alex.smith@example.com",
          "phone": "+352 27 12 34 56",
          "mobile": "+352 691 000 000",
          "language": "fr",
          "avatar": "https://cdn.habiata.lu/avatars/agent-uuid.jpg"
        }
      ],
      "portal_publications": [
        {
          "portal_integration_id": "portal-uuid",
          "portal_type": "MY_HABIATA_WEBSITE",
          "status": "PUBLISHED",
          "external_id": null,
          "published_at": "2025-01-15T10:30:00Z",
          "unpublished_at": null,
          "last_error": null,
          "last_error_at": null
        }
      ],
      "created_at": "2025-01-15T10:30:00Z",
      "updated_at": "2025-06-20T14:00:00Z"
    }
  ],
  "projects": [
    {
      "id": "proj-uuid-residence-du-parc",
      "company_id": "YOUR_COMPANY_ID",
      "name": "Résidence du Parc",
      "descriptions": {
        "fr": "Résidence de 12 appartements au cœur de Kirchberg."
      },
      "external_id": null,
      "cover_images": [],
      "property_count": 1
    }
  ],
  "pagination": {
    "page": 1,
    "limit": 20,
    "total": 42,
    "pages": 3
  }
}

Réponses aux erreurs

StatutDescription
400Valeur de portail inconnue, ou page / limit invalide
404Entreprise introuvable ou aucun portail configuré.

Images

Chaque photo est fournie dans sa version d'origine et en quatre copies WebP compressées. Affichez une copie : les originaux peuvent peser plusieurs mégaoctets.

Chaque taille est un cadre, pas une largeur : la photo est réduite pour tenir dans un carré de cette taille en conservant ses proportions. Une photo portrait inscrite dans 480 fait 480 px de haut et moins de 480 px de large. Les photos plus petites qu'une taille ne sont jamais agrandies.

Les copies sont générées peu après le téléversement. D'ici là, ou si la génération a échoué, le champ de taille vaut null. Utilisez alors la copie plus grande suivante, puis une plus petite, et l'original uniquement si aucune copie n'existe.

Tailles

images[]Photo principaleTaille
url_128highlighted_image_128128 px : mini-vignettes, marqueurs de carte
url_480highlighted_image_480480 px : cartes d'annonces et grilles
url_1080highlighted_image_10801080 px : pages de détail et tablettes
url_1920highlighted_image_19201920 px : galeries plein écran et images d'en-tête
urlhighlighted_imageFichier d'origine : téléchargements et solution de dernier recours

images[] liste toutes les photos dans l'ordre de la galerie, photo principale en premier. Les champs highlighted_image reprennent les tailles de la photo principale directement sur le bien : une carte d'annonce n'a pas besoin de parcourir le tableau.

Exemples de codes

Carte d'annonce

// Listing card: the main photo's sizes sit on the property itself
const cardUrl =
  property.highlighted_image_480 ??
  property.highlighted_image_1080 ??
  property.highlighted_image_1920 ??
  property.highlighted_image_128 ??
  property.highlighted_image;

Galerie avec srcset

const SIZES = [128, 480, 1080, 1920];

// Requested size first, then larger copies, then smaller ones, then the original
function pickImageUrl(image, size = 1080) {
  const larger = SIZES.filter((s) => s > size);
  const smaller = SIZES.filter((s) => s < size).reverse();
  for (const s of [size, ...larger, ...smaller]) {
    if (image[`url_${s}`]) return image[`url_${s}`];
  }
  return image.url;
}

// Photos are fitted inside the size and never enlarged
function copyWidth(image, size) {
  if (!image.width || !image.height) return size;
  return Math.round(image.width * Math.min(1, size / Math.max(image.width, image.height)));
}

function srcSet(image) {
  return SIZES.filter((s) => image[`url_${s}`])
    .map((s) => `${image[`url_${s}`]} ${copyWidth(image, s)}w`)
    .join(", ");
}

const gallery = property.images.map((image) => `
  <img
    src="${pickImageUrl(image, 1080)}"
    srcset="${srcSet(image)}"
    sizes="(max-width: 768px) 100vw, 1080px"
    alt="${image.alt_text ?? image.caption ?? property.title}"
    style="object-fit: cover; object-position: ${image.focus_point ?? "50% 50%"}"
    loading="lazy"
  />`);

Endpoint propriété unique

Renvoie une propriété publiée par ID, le pendant détail de la liste by-company.

La propriété doit avoir une publication PUBLISHED sur le portail résolu ; sinon la réponse est 404, identique à un ID inexistant.

Contrairement à l'endpoint liste, aucun filtrage de cycle de vie n'est appliqué : une annonce publiée reste accessible via son URL quel que soit son transaction_type (y compris sold, rented et off_market), afin que les liens profonds continuent de fonctionner. Lisez transaction_type pour décider comment afficher une transaction clôturée.

GEThttps://api.habiata.lu/public-properties/{propertyId}

Paramètres de chemin

propertyId

string (UUID) · Obligatoire

L'identifiant unique de la propriété.

Paramètres de requête

portal

string

Portail sur lequel le bien doit être publié. Par défaut habiata, le site de l'agence (MY_HABIATA_WEBSITE), qui peut aussi être nommé explicitement. Une valeur inconnue renvoie 400.

Par défaut habiata

habiataathome.luwortimmo.luimmotopnextimmofiliaimmoweltle_figarokleinanzeigenwillhabenderstandardnewhomehomegatesrealityotodomingatlanimmowebselogerleboncoinkyerogreenacresproperstarjamesedition

Exemple de requête

curl "https://api.habiata.lu/public-properties/YOUR_PROPERTY_ID"

# With portal filter
curl "https://api.habiata.lu/public-properties/YOUR_PROPERTY_ID?portal=nextimmo"

Exemple de réponse

200 OK
{
  "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "company_id": "YOUR_COMPANY_ID",
  "external_id": "REF-12345",
  "project_id": "proj-uuid-residence-du-parc",
  "project_name": "Résidence du Parc",
  "title": "Beautiful Apartment in Kirchberg",
  "titles": {
    "en": "Beautiful Apartment in Kirchberg",
    "fr": "Bel appartement à Kirchberg",
    "de": "Schöne Wohnung in Kirchberg"
  },
  "description": "Spacious 3-bedroom apartment with panoramic views...",
  "descriptions": {
    "en": "Spacious 3-bedroom apartment with panoramic views...",
    "fr": "Spacieux appartement de 3 chambres avec vue panoramique...",
    "de": "Geräumige 3-Zimmer-Wohnung mit Panoramablick..."
  },
  "property_type": "apartment",
  "transaction_type": "buy",
  "status": "active",
  "price": 850000,
  "room_count": 4,
  "bedrooms": 3,
  "bathrooms": 2,
  "area": 120,
  "area_unit": "sqm",
  "floor_level": 5,
  "address": "2 Rue du Fort Thüngen",
  "street": "Rue du Fort Thüngen",
  "house_number": "2",
  "city": "Luxembourg",
  "district": "Kirchberg",
  "zip_code": "1499",
  "country": "Luxembourg",
  "publish_address": true,
  "latitude": 49.6236,
  "longitude": 6.1469,
  "parcel_numbers": [
    "123/4567"
  ],
  "energy_class": "B",
  "indoor_parking_spaces": 1,
  "has_elevator": true,
  "monthly_charges": 250,
  "parking_fees": 35000,
  "available_from": "2026-11-01",
  "pet_policy": null,
  "virtual_tour_url": "https://my.matterport.com/show/?m=EXAMPLE",
  "highlighted_image": "https://cdn.habiata.lu/companies/YOUR_COMPANY_ID/living-room.jpg",
  "highlighted_image_128": "https://cdn.habiata.lu/image-variants/YOUR_COMPANY_ID/img-uuid/128.webp",
  "highlighted_image_480": "https://cdn.habiata.lu/image-variants/YOUR_COMPANY_ID/img-uuid/480.webp",
  "highlighted_image_1080": "https://cdn.habiata.lu/image-variants/YOUR_COMPANY_ID/img-uuid/1080.webp",
  "highlighted_image_1920": "https://cdn.habiata.lu/image-variants/YOUR_COMPANY_ID/img-uuid/1920.webp",
  "images": [
    {
      "url": "https://cdn.habiata.lu/companies/YOUR_COMPANY_ID/living-room.jpg",
      "url_128": "https://cdn.habiata.lu/image-variants/YOUR_COMPANY_ID/img-uuid/128.webp",
      "url_480": "https://cdn.habiata.lu/image-variants/YOUR_COMPANY_ID/img-uuid/480.webp",
      "url_1080": "https://cdn.habiata.lu/image-variants/YOUR_COMPANY_ID/img-uuid/1080.webp",
      "url_1920": "https://cdn.habiata.lu/image-variants/YOUR_COMPANY_ID/img-uuid/1920.webp",
      "is_main": true,
      "sort_order": 0,
      "caption": "Living room",
      "width": 4032,
      "height": 3024,
      "alt_text": "Bright living room with floor-to-ceiling windows",
      "focus_point": "50% 40%"
    }
  ],
  "nearby_places": [
    {
      "name": "Luxexpo tram stop",
      "category": "tram_stop",
      "distance": 350,
      "latitude": 49.6282,
      "longitude": 6.1641
    }
  ],
  "agents": [
    {
      "id": "agent-uuid",
      "name": "Alex Smith",
      "first_name": "Alex",
      "last_name": "Smith",
      "email": "alex.smith@example.com",
      "phone": "+352 27 12 34 56",
      "mobile": "+352 691 000 000",
      "language": "fr",
      "avatar": "https://cdn.habiata.lu/avatars/agent-uuid.jpg"
    }
  ],
  "portal_publications": [
    {
      "portal_integration_id": "portal-uuid",
      "portal_type": "MY_HABIATA_WEBSITE",
      "status": "PUBLISHED",
      "external_id": null,
      "published_at": "2025-01-15T10:30:00Z",
      "unpublished_at": null,
      "last_error": null,
      "last_error_at": null
    }
  ],
  "created_at": "2025-01-15T10:30:00Z",
  "updated_at": "2025-06-20T14:00:00Z"
}

La réponse est un objet Property unique, mêmes champs que l'endpoint liste (voir le schéma Property Object ci-dessus).

Réponses aux erreurs

StatutDescription
400Valeur de portail inconnue
404Propriété introuvable, non publiée sur ce portail, ou supprimée

Référence des types de propriétés

Le property_type Le champ accepte l’une des valeurs suivantes, organisées par catégorie. Utilisez ces valeurs lors du filtrage via l'API ou de l'interprétation des données de propriété.

Maison

housedetached_housesemi_detachedterraced_housetownhousevillamansionfarmhousecountry_housechaletbungalowcottage

Appartement

apartmentstudiopenthouseduplextriplexloftmaisonetteattic_apartmentground_floor

Nouveau développement et construction

new_buildoff_planunder_constructionhouse_modelland_with_houseturnkey_project

Bien d'investissement

investment_propertyrental_property

Terrain

building_landagricultural_landindustrial_landcommercial_land

Garage et parking

garageparking_spacecarportunderground_parking

Commercial et bureaux

officeoffice_buildingcoworking_spaceretail_spaceshopshopping_centershowroomrestaurantcafehotelbed_breakfast

Industriel et logistique

warehousefactoryindustrial_unitlogistics_centerstorage_facility

Usage spécial

healthcareeducationalleisurereligiousutilitygas_stationcar_washworkshop

Autre

commerciallandother

Endpoint projets groupés

Utiliser pour lire des projets entiers et des biens groupés.

GEThttps://api.habiata.lu/public-properties/projects/by-company/{companyId}

Paramètres de requête

page

integer

Numéro de page pour la pagination (indexé 1).

Par défaut 1

limit

integer

Nombre de projets par page. Maximum 100.

Par défaut 20

portal

string

Portail depuis lequel lire les projets publiés. Par défaut habiata, le site de l'agence (MY_HABIATA_WEBSITE), qui peut aussi être nommé explicitement. Une valeur inconnue renvoie 400.

Par défaut habiata

habiataathome.luwortimmo.luimmotopnextimmofiliaimmoweltle_figarokleinanzeigenwillhabenderstandardnewhomehomegatesrealityotodomingatlanimmowebselogerleboncoinkyerogreenacresproperstarjamesedition

Exemple de requête

curl "https://api.habiata.lu/public-properties/projects/by-company/YOUR_COMPANY_ID?page=1&limit=20"

Exemple de réponse

200 OK
{
  "projects": [
    {
      "id": "proj-uuid-residence-du-parc",
      "company_id": "YOUR_COMPANY_ID",
      "name": "Résidence du Parc",
      "descriptions": { "fr": "Résidence de 12 appartements au cœur de Belair." },
      "external_id": null,
      "cover_images": [
        {
          "image_id": "img-uuid-1",
          "property_id": null,
          "url": "https://cdn.habiata.lu/…/residence-du-parc.jpg",
          "url_128": "https://cdn.habiata.lu/…/128.webp",
          "url_480": "https://cdn.habiata.lu/…/480.webp",
          "url_1080": "https://cdn.habiata.lu/…/1080.webp",
          "url_1920": "https://cdn.habiata.lu/…/1920.webp",
          "width": 2400,
          "height": 1600,
          "alt_text": "Résidence du Parc — façade",
          "focus_point": null
        }
      ],
      "property_count": 3,
      "properties": [
        {
          "id": "unit-uuid-1",
          "title": "Apartment 2.1 — 3 bedrooms",
          "project_id": "proj-uuid-residence-du-parc",
          "project_name": "Résidence du Parc",
          "price": 650000,
          "property_type": "apartment",
          "transaction_type": "buy"
        }
      ]
    }
  ],
  "pagination": {
    "page": 1,
    "limit": 20,
    "total": 1,
    "pages": 1
  }
}

Référence des projets

Les projets regroupent des biens connexes, généralement des unités dans le même immeuble ou programme neuf.

Deux façons de travailler avec les projets

Endpoint biens (plat)Endpoint projets groupés
Point de terminaisonGET /public-properties/by-company/{companyId}GET /public-properties/projects/by-company/{companyId}
RenvoieToutes les unités publiéesProjets publiés avec unités imbriquées dans properties[]
Champs projetproject_id et project_name sur chaque unitéMétadonnées projet plus unités imbriquées dans properties[]
Publier dans HabiataPublier chaque bien sur le portailProjets → sélectionner un projet nommé → Publier sur les portails

Publier un bien ne publie pas son projet. Assigner des unités à un projet dans le CRM ne suffit pas pour l'endpoint groupé. Vous devez publier le projet séparément.

Référence des types de transaction

Le transaction_type indique le sens de la transaction et le cycle de vie de l'annonce. En filtre de requête, buy et rent sont des familles ; sold et rented sont exclus sauf s'ils sont nommés explicitement.

En cours (principal)

buyrent

En cours (secondaire)

newvaluationother

En cours (en attente)

sous_compromisreserved

Fermé

soldrentedoff_market

Pour les agents IA et les intégrations

Vous créez une intégration ou utilisez un agent IA ? Voici tout ce qu'il vous faut en un clic.

Avis IA et cookies

Les images de ce site web sont générées par intelligence artificielle.

Nous utilisons des cookies pour améliorer votre expérience et analyser le trafic du site. Lire notre politique de confidentialité