API pública

Disponibilidad, precios y datos de los apartamentos en JSON — gratis, sin API-Key.

Todos los endpoints son de solo lectura, se pueden usar sin registro y devuelven JSON con CORS abierto. El punto de entrada para asistentes de IA e integraciones es /api/v1/apartments: una consulta responde qué apartamentos están libres en un periodo — incluidos precios, superficie, dirección y enlace a la página de detalle. Resumen legible por máquinas del sitio: /llms.txt.

Endpoints

Endpoint Descripción
GET /api/v1/apartments?from&to Búsqueda combinada por periodo: apartamentos libres entre from y to (YYYY-MM-DD), incluidos precios, superficie, habitaciones, dirección y enlace a la página de detalle. El punto de entrada recomendado.
GET /api/v1/apartments Sin parámetros: los mismos datos de los apartamentos con las próximas ventanas libres por apartamento.
GET /api/availability-search?from&to Solo slugs y nombres de los apartamentos libres en el periodo (respuesta ligera).
GET /api/availability-windows Ventanas libres por apartamento (sin precios ni metadatos).
GET /api/availability/<icalSlug>?days=240 Cuadrícula diaria libre/ocupado para un apartamento (icalSlug de la respuesta de /api/v1/apartments).
GET /api/prices Precios por noche, mensuales y a largo plazo, así como tarifa de limpieza (CHF).
GET /api/apartment-facts Superficies de los apartamentos en m².

Respuesta: búsqueda por periodo

GET /api/v1/apartments?from=2026-08-01&to=2026-08-15 — ejemplo abreviado:

{
  "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 Descripción
from / to / nights / mode string / number Periodo solicitado; mode es short_term por debajo de 28 noches, de lo contrario mid_or_long_term.
count number Número de apartamentos libres en el periodo.
apartments[] array Apartamentos libres con todos los metadatos, precios y enlaces.
apartments[].slug string ID pública del apartamento, idéntica al slug de la página de detalle.
apartments[].icalSlug string Clave de unión con los endpoints de bajo nivel (/api/prices, /api/availability/…).
apartments[].prices object | null Precios en CHF; null si la fuente de precios no está disponible temporalmente (véase warnings).
apartments[].url object Enlaces absolutos a la página de detalle (alemán e inglés).
unavailable[] array Apartamentos no disponibles en el periodo (solo slug, nombre, enlace).
incomplete[] array Apartamentos cuyas fuentes de disponibilidad estaban incompletas — no es posible pronunciarse.
combinations[] array Combinaciones reservables con exactamente un cambio de apartamento (máx. 3) cuando el período no está libre de una sola pieza – cada segmento está sujeto a la ventana de reserva de 60 días, solo en formato JSON.
warnings[] array Avisos sobre fuentes secundarias no disponibles, p. ej. prices_unavailable.

Respuesta: ventanas libres (sin parámetros)

Sin from/to, cada apartamento contiene además un objeto availability con las próximas ventanas libres (end es exclusivo; null = abierto hasta el horizonte de datos):

"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
}

Exportación CSV (?format=csv)

Con ?format=csv, /api/v1/apartments devuelve una tabla CSV plana en lugar de JSON — una fila por apartamento, pensada para hojas de cálculo. Ambos modos (búsqueda por periodo y ventanas) admiten el parámetro. Columnas base en orden estable:

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
  • Modo periodo (con from/to): además la columna status (available, unavailable o incomplete) — todos los apartamentos aparecen en una tabla.
  • Modo ventanas (sin parámetros): además incomplete así como next_window_from y next_window_to (solo la próxima ventana libre; final abierto = to vacío), short_term_free_days, mid_term_available_from y long_term_free_from.
  • Lo anidado se aplana: features unidas con ;, precios como columnas individuales en CHF; warnings se omiten en el CSV.

Google Sheets (IMPORTDATA)

Inserte la fórmula en cualquier celda — Google Sheets carga la tabla directamente y la actualiza periódicamente por sí solo:

=IMPORTDATA("https://www.apartments.zuerich/api/v1/apartments?from=2026-08-01&to=2026-08-15&format=csv")

Interpretar correctamente los precios

  • Estancia corta (mode short_term, por debajo de 28 noches): valor orientativo = night × nights + cleaningFee.
  • Alojamiento temporal (a partir de 28 noches): precio mensual month, a partir de 3 meses el precio reducido a largo plazo longTerm.
  • Todos los precios en CHF y sin compromiso — es determinante la oferta a través de la solicitud de reserva en la página de detalle.

Actualidad y caché

  • La disponibilidad llega en tiempo real del sistema de reservas; las respuestas se almacenan en caché hasta 60 segundos (navegador) y 300 segundos (edge CDN).
  • Las respuestas de error nunca se almacenan en caché.

Ejemplos

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

Todos los endpoints envían Access-Control-Allow-Origin: * — la API se puede consultar directamente desde el navegador, desde scripts y desde agentes de IA.

Versionado

Los endpoints bajo /api/v1/ son estables: se pueden añadir campos, los campos existentes no cambian ni desaparecen sin una nueva versión.

Uso

La API es de uso libre para asistentes de IA, servicios de relocation e integraciones privadas. Si publica los datos, agradecemos una indicación de la fuente con enlace a apartments.zuerich.

¿Preguntas o requisitos mayores? info@datenpfleger.ch · llms.txt