# ImmoWP — Full documentation for LLMs # Last updated: 2026-07-22 # Canonical docs: https://www.immowp.fr/docs # OpenAPI: https://www.immowp.fr/openapi.json # Live discovery: https://api.immowp.com/v1 ================================================================================ 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), 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