API pubblica
Disponibilità, prezzi e dati degli appartamenti in JSON — gratis, senza API-Key.
Tutti gli endpoint sono di sola lettura, utilizzabili senza registrazione e restituiscono JSON con CORS aperto. Il punto di ingresso per assistenti AI e integrazioni è /api/v1/apartments: una richiesta risponde a quali appartamenti sono liberi in un periodo — inclusi prezzi, superficie, indirizzo e link alla pagina di dettaglio. Panoramica leggibile dalle macchine del sito: /llms.txt.
Endpoint
| Endpoint | Descrizione |
|---|---|
GET /api/v1/apartments?from&to | Ricerca combinata per periodo: appartamenti liberi tra from e to (YYYY-MM-DD), inclusi prezzi, superficie, locali, indirizzo e link alla pagina di dettaglio. Il punto di ingresso consigliato. |
GET /api/v1/apartments | Senza parametri: gli stessi dati degli appartamenti con le prossime finestre libere per ciascun appartamento. |
GET /api/availability-search?from&to | Solo slug e nomi degli appartamenti liberi nel periodo (risposta snella). |
GET /api/availability-windows | Finestre libere per ciascun appartamento (senza prezzi e metadati). |
GET /api/availability/<icalSlug>?days=240 | Griglia giornaliera libero/occupato per un appartamento (icalSlug dalla risposta di /api/v1/apartments). |
GET /api/prices | Prezzi per notte, mensili e a lungo termine nonché spese di pulizia (CHF). |
GET /api/apartment-facts | Superfici degli appartamenti in m². |
Risposta: ricerca per periodo
GET /api/v1/apartments?from=2026-08-01&to=2026-08-15 — esempio abbreviato:
{
"provider": "apartments.zuerich",
"from": "2026-08-01",
"to": "2026-08-15",
"nights": 14,
"mode": "short_term",
"count": 5,
"apartments": [
{
"slug": "badenerstrasse-4101",
"icalSlug": "4101",
"name": "Business Apartment 4101",
"description": "Business-Studio im 1. Stock an der Badenerstrasse 414 …",
"type": "studio",
"typeName": "Studio",
"quartier": "kreis-4",
"quartierName": "Kreis 4, Badenerstrasse",
"address": { "street": "Badenerstrasse 414", "zip": "8004", "city": "Zürich" },
"coordinates": { "lat": 47.3775, "lng": 8.4892 },
"sizeM2": 38,
"rooms": 1,
"maxGuests": 2,
"floor": 1,
"features": ["Voll ausgestattete Küche", "Smart TV", "Highspeed WLAN"],
"prices": {
"currency": "CHF",
"night": 95,
"month": 2190,
"longTerm": 2090,
"cleaningFee": 50
},
"url": {
"de": "https://www.apartments.zuerich/de/wohnungen/badenerstrasse-4101/",
"en": "https://www.apartments.zuerich/en/apartments/badenerstrasse-4101/"
},
"image": "https://www.apartments.zuerich/_astro/wohnzimmer.CVxq6Kk3.jpg"
}
],
"unavailable": [
{ "slug": "algier-15-studio", "name": "Studio AL15-1", "url": { "de": "…", "en": "…" } }
],
"incomplete": [],
"combinations": [
{
"switches": 1,
"switchDate": "2026-08-08",
"segments": [
{ "slug": "badenerstrasse-4404", "icalSlug": "4404", "name": "Business Apartment 4404",
"from": "2026-08-01", "to": "2026-08-08", "nights": 7, "url": { "de": "…", "en": "…" } },
{ "slug": "badenerstrasse-4101", "icalSlug": "4101", "name": "Business Apartment 4101",
"from": "2026-08-08", "to": "2026-08-15", "nights": 7, "url": { "de": "…", "en": "…" } }
]
}
],
"warnings": []
} | Campo | Tipo | Descrizione |
|---|---|---|
from / to / nights / mode | string / number | Periodo richiesto; mode è short_term sotto le 28 notti, altrimenti mid_or_long_term. |
count | number | Numero di appartamenti liberi nel periodo. |
apartments[] | array | Appartamenti liberi con tutti i metadati, prezzi e link. |
apartments[].slug | string | ID pubblico dell'appartamento, identico allo slug della pagina di dettaglio. |
apartments[].icalSlug | string | Chiave di join agli endpoint di basso livello (/api/prices, /api/availability/…). |
apartments[].prices | object | null | Prezzi in CHF; null se la fonte dei prezzi è temporaneamente irraggiungibile (vedi warnings). |
apartments[].url | object | Link assoluti alla pagina di dettaglio (tedesco e inglese). |
unavailable[] | array | Appartamenti non disponibili nel periodo (solo slug, nome, link). |
incomplete[] | array | Appartamenti le cui fonti di disponibilità erano incomplete — nessuna indicazione possibile. |
combinations[] | array | Combinazioni prenotabili con esattamente un cambio di appartamento (max. 3) quando il periodo non è libero in un unico blocco – ogni segmento è soggetto alla finestra di prenotazione di 60 giorni, solo in formato JSON. |
warnings[] | array | Segnalazioni su fonti secondarie non disponibili, ad es. prices_unavailable. |
Risposta: finestre libere (senza parametri)
Senza from/to, ogni appartamento contiene inoltre un oggetto availability con le prossime finestre libere (end è esclusivo; null = aperto fino all'orizzonte dei dati):
"availability": {
"offered": { "shortTerm": true, "midTerm": true, "longTerm": false },
"windows": [{ "start": "2026-08-03", "end": "2026-09-01", "days": 29 }],
"shortTermFreeDays": 12,
"midTermAvailableFrom": "2026-08-03",
"longTermFreeFrom": null
} Esportazione CSV (?format=csv)
Con ?format=csv, /api/v1/apartments restituisce una tabella CSV piatta invece di JSON — una riga per appartamento, pensata per i fogli di calcolo. Entrambe le modalità (ricerca per periodo e finestre) supportano il parametro. Colonne base in ordine stabile:
slug, name, description, type, type_name, quartier, quartier_name,
street, zip, city, lat, lng, size_m2, rooms, max_guests, floor, features,
price_night, price_month, price_long_term, cleaning_fee, listing_status,
url_de, url_en - Modalità periodo (con from/to): in più la colonna status (available, unavailable o incomplete) — tutti gli appartamenti compaiono in un'unica tabella.
- Modalità finestre (senza parametri): in più incomplete nonché next_window_from e next_window_to (solo la prossima finestra libera; fine aperta = to vuoto), short_term_free_days, mid_term_available_from e long_term_free_from.
- Le strutture annidate vengono appiattite: features unite con ;, prezzi come colonne singole in CHF; warnings non compaiono nel CSV.
Google Sheets (IMPORTDATA)
Inserisci la formula in una cella qualsiasi — Google Sheets carica la tabella direttamente e la aggiorna periodicamente da sé:
=IMPORTDATA("https://www.apartments.zuerich/api/v1/apartments?from=2026-08-01&to=2026-08-15&format=csv") Interpretare correttamente i prezzi
- Soggiorno breve (mode short_term, sotto le 28 notti): valore indicativo = night × nights + cleaningFee.
- Alloggio temporaneo (da 28 notti): prezzo mensile month, da 3 mesi il prezzo ridotto a lungo termine longTerm.
- Tutti i prezzi sono in CHF e senza impegno — fa fede l'offerta tramite la richiesta di prenotazione sulla pagina di dettaglio.
Attualità e caching
- La disponibilità arriva in tempo reale dal sistema di prenotazione; le risposte sono memorizzate nella cache fino a 60 secondi (browser) e 300 secondi (edge CDN).
- Le risposte di errore non vengono mai memorizzate nella cache.
Esempi
curl
curl -s 'https://www.apartments.zuerich/api/v1/apartments?from=2026-08-01&to=2026-08-15' | jq '.apartments[].name' JavaScript
const res = await fetch(
"https://www.apartments.zuerich/api/v1/apartments?from=2026-08-01&to=2026-08-15"
);
const data = await res.json();
for (const apartment of data.apartments) {
console.log(apartment.name, apartment.prices?.night, "CHF/Nacht", apartment.url.de);
} CORS
Tutti gli endpoint inviano Access-Control-Allow-Origin: * — l'API è interrogabile direttamente dal browser, dagli script e dagli agenti AI.
Versionamento
Gli endpoint sotto /api/v1/ sono stabili: possono essere aggiunti campi, i campi esistenti non cambiano né scompaiono senza una nuova versione.
Utilizzo
L'API è liberamente utilizzabile per assistenti AI, servizi di relocation e integrazioni private. In caso di pubblicazione dei dati apprezziamo un'indicazione della fonte con link a apartments.zuerich.
Domande o requisiti maggiori? info@datenpfleger.ch · llms.txt