API-Dokumentation
immonika.de stellt eine oeffentliche, read-only Listings-API als statische JSON-Dateien bereit. Es gibt keinen API-Key, keine Schreibzugriffe und keinen separaten API-Server — die Dateien werden taeglich mit dem Portal neu generiert.
Katalog
Scanner finden die API unter /.well-known/api-catalog (RFC 9727). Die Datei liegt unter /api/api-catalog — nicht im Let’s-Encrypt-Ordner. Format: Linkset. Kein ChatGPT-Plugin.
Ablauf
/api/workflow (Alias /api/workflow.json) ist der definierte Flow: Suche → Filtern → Auswahl → Vergleich → Kontakt. Kein Chat-Server. Der Agent führt die Schritte an den statischen Dateien aus. Kontakt nur über listing.json → contactIntent, nicht über das HTML-Formular. In Suche, Anbieter-Index und (beim nächsten Schreiben) listing.json steht nextActions.
Suche
/api/search (Alias /api/search.json) ist der Suchindex: die jüngsten öffentlichen Inserate (höchstens 25.000), Felder Ort, Zimmer, Preis, URL. Filter und Seiten macht der Agent an items[] — nicht ?city= anhängen, der Query-String ändert die Datei nicht. Beispiel: 3 Zimmer in Celle unter 300.000 Euro. Rest über /api/cities.json und /{ortSlug}/api/listings.json.
Anbieter
/api/anbieter (Alias /api/anbieter.json, englisch /api/agents) ist der Anbieter-Index: alle öffentlichen Firmen und Makler mit gültigem Impressum und mindestens einem Inserat. Filter Name, Ort, Rolle macht der Agent an items[]. Orts-Empfehlungen (20 km) bleiben unter /{ortSlug}/api/makler.json.
Empfohlener Einstieg
/api/api-catalog— RFC-9727-Katalog (Standard-URL/.well-known/api-catalog)/api/workflow— Ablauf Suche → Kontakt/api/search— Suchindex (jüngste Inserate, Filter clientseitig)/api/anbieter— Anbieter-Index (Firmen und Makler)/api/listings.json— Discovery (Verweise, kein Gesamt-Feed)/api/cities.json— alle Orte mit mindestens einem Inserat/{ortSlug}/api/listings.json— Inserate eines Ortes (z. B. /Berlin/api/listings.json)/{ortSlug}/api/stadtteile.json— Bezirke/Stadtteile mit Centroid (z. B. /Berlin/api/stadtteile.json)
Stadtteil-Abfrage: Bezirksnamen aus stadtteile.json, dann listings.json-Items nach district, stadtteil oder address.addressSubLocality filtern.
Weitere Filterebenen: /{ortSlug}/{Vermarktungsart}/api/listings.json (Kaufen, Mieten, Pachten), danach Objektart und Unterkategorie.
Endpunkte
| Pfad | Beschreibung |
|---|---|
| /api/api-catalog | RFC 9727 Linkset; Alias /.well-known/api-catalog |
| /api/workflow | Ablauf (type: agentWorkflow): Suche → Auswahl → Kontakt |
| /api/search | Suchindex (type: searchIndex), jüngste Inserate, Kappe 25.000 |
| /api/anbieter | Anbieter-Index (type: agentIndex), alle öffentlichen Firmen und Makler |
| /api/listings.json | Discovery-Stub (type: discovery) |
| /api/cities.json | Orte mit listingCount und Ziel-URL |
| /openapi.json | OpenAPI 3.0 (Standardpfad) |
| /swagger.json | Swagger-Alias (gleicher Inhalt) |
| /api/openapi.json | OpenAPI unter /api/ |
| /api/sitemap-api.xml | Sitemap aller Orts-API-URLs |
| /ai-index.json | Kompakter KI-Einstieg (JSON) |
| /llms.txt | LLM-orientierte Dokumentation (DE/EN) |
/{ortSlug}/api/listings.json | Schema.org RealEstateListing in items (inkl. district/stadtteil, listingApi) |
/{ortSlug}/api/makler.json | Empfohlene Makler (20 km); qualityIndexScore 0–100 relativ zum höchsten ranking dieser Ortsliste (100 = Bester im Ort) |
/{ortSlug}/api/stadtteile.json | Stadtteile/Bezirke mit Centroid (items[].name, lat, lng) |
Datenstruktur
Katalog (/api/api-catalog): RFC 9727 Linkset mit service-desc (OpenAPI), service-doc, service-meta, item. Standard-URL /.well-known/api-catalog.
Ablauf (/api/workflow): type: agentWorkflow, steps[] (search, filter, select, compare, contact), nextActions, humanFormForbidden: true.
Suche (/api/search): type: searchIndex, totalCount, truncated, maxItems 25000, serverSideFilter: false, items[] mit city, citySlug, numberOfRooms, offers.price, listingApi, nextActions.
Anbieter (/api/anbieter): type: agentIndex, items[] mit role (organization/person), name, aeHash, listingCount, qualityIndexScore, agentApi, listingsApi.
Discovery (/api/listings.json): schemaVersion, type, entryPoints, perCityListingsPattern, perCityStadtteilePattern, hint
Stadtteile (/{ortSlug}/api/stadtteile.json): ort, totalCount, items[] mit name, lat, lng
Listings (/{ortSlug}/.../api/listings.json): zusätzlich totalCount, truncated, maxItems (2000 pro Index-Ebene). Auf Ortsebene: stadtteileApi, districtFilterHint. Array items mit u. a. name (inkl. Bezirk), district, stadtteil, url, listingApi, offers.price, address.addressSubLocality.
Exposee-Detail (…/api/listing.json): zusätzlich dateModified, amenities (physische Ausstattung), energy (Energieausweis, falls vorhanden), contactIntent.
Makler (/{ortSlug}/api/makler.json): qualityIndexScope: ort, qualityIndexPeerMaximum = höchster ranking in dieser Liste, items[].qualityIndexScore = gerundet 100 × ranking / PeerMaximum (nicht CSV-Maximalstufe). Profil /Anbieter/{hash}/api/agent.json: derselbe Score relativ zum Portal-Maximum (qualityIndexScope: portal).
Unter Kaufen heißt die Objektart Eigentumswohnungen (nicht „Wohnungen“); Wohnungen gilt bei Mieten.
OpenAPI / Maschinenlesbar
Fuer Tools, die Swagger oder OpenAPI erwarten:
Hinweise für KI-Crawler
- HTML-Seiten enthalten JSON-LD; API-Daten sind unter
/api/partitioniert. /{ortSlug}/leanlist.jsonist nur für Browser-Widgets — nicht für KI-APIs.- Keine externen Tracker; alle Ressourcen werden lokal gehostet (DSGVO).