# ImmoWP — Full documentation for LLMs # Last updated: 2026-09-04 # Canonical docs: https://www.immowp.fr/docs # OpenAPI: https://www.immowp.fr/openapi.json # Live discovery: https://api.immowp.com/v1 ================================================================================ PRODUIT — ce qu'est ImmoWP, pour qui, à quel prix ================================================================================ ImmoWP est une passerelle immobilière éditée par Meerweb (SARL, Laval, 53000, France), exploitée depuis 2017. Elle relie le logiciel de transaction d'une agence immobilière (Hektor, Apimo, Netty, ImmoFacile, Ubiflow…) à son site WordPress : les annonces saisies dans le logiciel métier sont publiées et tenues à jour automatiquement sur le site, sans ressaisie. Architecture — sens du flux ImmoWP fonctionne en PULL : le cron du site WordPress appelle api.immowp.com, qui va lire le flux du CRM, le normalise et le renvoie. Le plugin écrit ensuite les biens en base. Conséquence pratique : le site n'a aucune route publique à exposer et fonctionne derrière un pare-feu, une authentification HTTP ou en préprod protégée. Les passerelles concurrentes en PUSH (le cloud appelle le site) échouent dans ces configurations. Une seule API alimente le plugin WordPress, les sites Meerweb et le widget iframe : un correctif de mapping profite à tous les clients d'un logiciel. Couverture 50 passerelles documentées vers des logiciels métier, plus l'intégration à la demande des flux normalisés XML/CSV (Poliris, Ubiflow, hektorXML) qu'exportent la plupart des autres logiciels. 200+ agences équipées, 100+ sites créés. Liste à jour et vérificateur de compatibilité : https://www.immowp.fr/nos-passerelles Tarifs (au 2026-08-18, hors taxes, euros) Licence passerelle : 500 € HT, paiement unique, pour un site. Maintenance et support : 150 € HT/an, offerte la première année. Essai gratuit : 10 jours. Sont inclus sans supplément : installation et configuration par nos soins, import illimité de biens (aucun plafond au nombre d'annonces), mises à jour automatiques du plugin, surveillance des flux, support email prioritaire, compatibilité avec tous les thèmes WordPress. Page de référence : https://www.immowp.fr/tarifs Délais et exploitation Mise en service : environ 5 jours ouvrés après réception des accès au flux. Synchronisation : cron quotidien par défaut, fréquence ajustable ; la réponse d'un flux est mise en cache 1 heure côté API. Les images ne sont téléchargées qu'une fois (déduplication par URL source), et une panne du logiciel métier ne provoque jamais la suppression du catalogue : la synchronisation s'interrompt en conservant les biens publiés. Extensions - Gestion immobilière (Lite, gratuit, wordpress.org) : type de contenu dédié, 8 taxonomies, fiches saisies à la main, recherche multicritères, DPE/GES, carte OpenStreetMap sur la fiche du bien, sans clé API. https://wordpress.org/plugins/immowp-gestion-immobiliere/ - Gestion Immo Pro (79 € HT en paiement unique, par site) : ajoute au Lite les alertes email, les favoris, la carte de tous les biens avec recherche par rayon, le partage, la fiche imprimable/PDF et les descriptions par IA. Incluse dans la passerelle ImmoWP. https://www.immowp.fr/nos-solutions/immowp-gestion-immo-pro - Diagnostic DPE/GES : étiquettes énergie et climat conformes à l'arrêté du 31 mars 2021, seuils des petites surfaces (arrêté du 25 mars 2024) et mentions légales obligatoires. https://wordpress.org/plugins/immowp-diagnostic-dpe-ges/ - Widget iframe : publie le catalogue d'une agence sur un site tiers, avec visionneuse plein écran, vidéo, visite virtuelle et 11 critères de recherche. Conformité des annonces (droit français) Les données publiées respectent l'arrêté du 10 janvier 2017 pour les professionnels et l'arrêté du 21 avril 2022 pour les bailleurs particuliers : loyer charges comprises (distingué selon qu'il vient du flux ou d'un calcul, jamais inventé), honoraires et leur charge, dépôt de garantie, caractère meublé, encadrement des loyers avec loyer de référence majoré, complément de loyer, charges de copropriété et procédures (loi ALUR), numéro d'enregistrement du meublé de tourisme, viager (bouquet et rente), DPE et GES avec la mention « logement à consommation énergétique excessive » en classes F et G, et la mention Géorisques (art. L. 125-5 du code de l'environnement). Contact contact@immowp.fr — https://www.immowp.fr/contact ================================================================================ OVERVIEW ================================================================================ ImmoWP (by Meerweb) is a real-estate gateway: - Pulls listings from 40+ French/EU CRMs (Hektor, Apimo, Ubiflow, Netty, Whise, SweepBright, Adapt Immo, VisualQie, VitaHome, HeliosConnect, etc.) - Normalizes them into a Property JSON model - Serves WordPress plugins, Meerweb-generated sites, and any headless consumer Architecture rule: ONE CRM API core at api.immowp.com. Meerweb must NOT reimplement CRM connectors. ================================================================================ BASE URL & VERSIONS ================================================================================ API base: https://api.immowp.com Docs: https://www.immowp.fr/docs Why gateway (man-in-the-middle): https://www.immowp.fr/docs/pourquoi-une-passerelle Website: https://www.immowp.fr v1 (recommended): REST under /v1/* v0 (legacy): GET /?variable1=crm&variable2=client — still used by WordPress plugin Response headers: - X-Request-Id - X-ImmoWP-API-Version: 1 (on v1 routes) - X-Cache: HIT|MISS (on property list) ================================================================================ AUTHENTICATION ================================================================================ Provide API key via one of: Key: Authorization: Bearer X-ImmoWP-Key: Authenticated routes also need: crm = connector code (e.g. apimo, hektor, ubiflow) client = client slug (alphanumeric, dash, underscore) Errors: 401 AUTH_FAILED — missing/invalid key or crm/client 403 FORBIDDEN — passerelle disabled (desactive=1) Security: - Server-side only. Never ship keys to browsers. - HTTPS only. Error envelope (v1): { "status": "error", "code": "AUTH_FAILED", "message": "…", "timestamp": "2026-07-22T12:00:00+00:00", "request_id": "…" } ================================================================================ ENDPOINTS v1 ================================================================================ GET /v1 Public discovery JSON: endpoints list, doc links, auth methods. GET /v1/connectors Public list of supported CRM connectors: id, label, type (api|zip|xml), notes. GET /v1/status?crm={crm}&client={client} Auth required. Returns: active, contract_end, wordpress_url, last_update_status/count/message/timestamp, connector meta. GET /v1/properties?crm={crm}&client={client}&page=1&per_page=50 Auth required. Paginated property list. per_page max 200, default 50. Cache ~1 hour server-side. Response: { "status": "ok", "data": [ { …Property… }, … ], "meta": { "page", "per_page", "total", "total_pages", "crm", "client" }, "request_id": "…" } GET /v1/properties/{id}?crm={crm}&client={client} Auth required. {id} matches Property.affId OR Property.affNum. 404 NOT_FOUND if missing. POST /v1/report Auth required (key in body or headers). Body JSON: { "key": "", // optional if header present "crm": "apimo", "client": "demo", "status": "success", // success | error "count": 42, "message": "Import OK", "site_url": "https://…" // optional } Used by WordPress after import. May capture wordpress_url from WP User-Agent: WordPress/6.x; https://site.example ================================================================================ LEGACY v0 ================================================================================ GET /?variable1={crm}&variable2={client} Header: Key: Returns full non-paginated property array (plugin format). POST /report Same semantics as /v1/report (legacy path). ================================================================================ PROPERTY DATA MODEL v1 — NORMALIZED (default) ================================================================================ GET /v1/properties returns format=normalized by default. Pass format=raw for legacy ImmoWP fields. Normalized example: { "id": "…", "reference": "297db", "crm_source": "immofacile", "offer_type": "sale", "property_type": "house", "status": "available", "title": { "fr": "Maison 3 chambres + bureau" }, "description": { "fr": "…" }, "financial": { "currency": "EUR", "sale_price": { "amount": 164650, "currency": "EUR" } }, "areas": { "living": { "value": 95, "unit": "sqm" } }, "rooms": { "total": 5, "bedrooms": 3, "bathrooms": 1 }, "location": { "city": "SAINT JEAN DE BOISEAU", "postal_code": "44640", "country": "FR", "geo": { "latitude": 47.19, "longitude": -1.72 } }, "media": { "photos": [ { "url": "https://…", "ordinal": 0 } ] }, "energy": { "dpe_letter": "D", "ges_letter": "C" }, "agency": { "name": "…", "phone": "…" }, "agent": { "first_name": "…", "last_name": "…", "email": "…" }, "amenities": [ "garden", "pool" ] } offer_type enum: sale | rent | seasonal_rent | life_annuity | program property_type enum (best-effort): apartment | house | land | parking | commercial | office | building | program | warehouse Null/empty fields are omitted. Amounts and areas are numbers. ================================================================================ PROPERTY DATA MODEL raw (French camelCase, format=raw) ================================================================================ Identity: affId, affNum, passerelleName, licenceValidite typeTransaction, typeCode, typeLibelle dateCreation, dateMaj, dateDispo Texts (multilingual): intitule, intituleEn, intituleEs, intituleDe, intituleIt, intituleRu, intituleNv commentaires, commentairesEn, commentairesEs, commentairesDe, commentairesIt, commentairesRu, commentairesNv Pricing: prix, prixCurrency, prixM2, prixHorsHono, prixMax, prixMetaNum loyer, loyerMensuelCC, loyerPeriod, loyerMax montantHonoAcq, montantHonoVen, pourcentageHono chargesMensuelles, depotGarantie, taxeFonciere Sizes / rooms: surfaceHabitable, surfaceCarrez, surfaceTerrain, surfaceSejour, … nbrePieces, nbreChambres, nbreSDB, nbreWC, nbreEtage, numEtage, anneeConstruction Location: ville, codePostal, pays, adresse, latitude, longitude (when provided) Media: photos (array), video, visiteVirtuelle Agency / agent: agenceId, agenceNom, agenceAdresse, agenceCP, agenceVille, agenceTel, agenceMail, agenceLogo negoId, negoNom, negoPrenom, negoTel, negoMobile, negoEmail, negoPhoto Not all fields are filled for every CRM — treat empty string as missing. Minimal example: { "affId": "12345", "affNum": "A-2026-01", "intitule": "Appartement 3 pièces centre-ville", "typeTransaction": "Vente", "prix": "285000", "prixCurrency": "EUR", "surfaceHabitable": "72", "nbrePieces": "3", "nbreChambres": "2", "ville": "Lyon", "codePostal": "69003", "photos": ["https://cdn.example/1.jpg"] } ================================================================================ CONNECTORS (subset — full list: GET /v1/connectors) ================================================================================ apimo, hektor, hektorxml, hektor_neuf, ubiflow, ubiflowneuf, netty, immofacile, whise, whisec2i, sweepbright, adaptimmo, visualqie, oneexpert, vitahome, helios/heliosconnect, omnicasa, activimmo, casaone, publimmo, mls, mls-v3, flatbay, gercop, ics, cryptml, transim, transelis, rodacom, unlatch, monsuperlocataire, dome, alveen, entities, immonot, immobilier_notaires, synermi, vinci, powerimmo, custom Types: api — REST/OAuth to CRM zip — download ZIP (often Poliris CSV) xml — remote XML feed ================================================================================ WORDPRESS PLUGIN ================================================================================ - Install plugin + set api key, crm, client - Cron pulls listings from API (v0 dump) - After import: POST /report with status/count - Companion plugins: gestion-immobiliere (front, free Lite + paid Pro add-on), estimation, DPE - Marketing pages: https://www.immowp.fr/nos-passerelles - Guides: /blog/connecter-apimo-wordpress, connecter-hektor-wordpress, etc. ================================================================================ MEERWEB ================================================================================ Meerweb (https://meerweb.fr) generates real-estate websites. It must consume api.immowp.com (same keys / passerelle rows). Do not maintain a second CRM connector stack inside Meerweb. ================================================================================ CURL EXAMPLES ================================================================================ # Discovery curl -s https://api.immowp.com/v1 # Status curl -s "https://api.immowp.com/v1/status?crm=apimo&client=DEMO" \ -H "Key: YOUR_KEY" # Properties page 1 curl -s "https://api.immowp.com/v1/properties?crm=apimo&client=DEMO&page=1&per_page=20" \ -H "Authorization: Bearer YOUR_KEY" # Property detail curl -s "https://api.immowp.com/v1/properties/A-2026-01?crm=apimo&client=DEMO" \ -H "Key: YOUR_KEY" # Report curl -s -X POST https://api.immowp.com/v1/report \ -H "Content-Type: application/json" \ -d '{"key":"YOUR_KEY","crm":"apimo","client":"DEMO","status":"success","count":12,"message":"OK"}' ================================================================================ RECOMMENDED SYSTEM PROMPT SNIPPET ================================================================================ You are integrating ImmoWP real-estate listings API. Base URL: https://api.immowp.com Auth: header "Key: " OR "Authorization: Bearer " Required query params on authenticated routes: crm, client Preferred endpoints: GET /v1/properties, GET /v1/status, GET /v1/connectors Docs: https://www.immowp.fr/docs OpenAPI: https://www.immowp.fr/openapi.json Property fields use French camelCase. Server-side fetch only; never leak API keys. ================================================================================ CONTACT / PRODUCT ================================================================================ Site: https://www.immowp.fr Contact: https://www.immowp.fr/contact Pricing: https://www.immowp.fr/tarifs Company: Meerweb (SARL), Laval, France