{
  "api": "vamosalicante-public-api",
  "version": "1",
  "endpoint": "/api/public/v1",
  "ok": true,
  "generatedAt": {
    "epochMs": 1788333413268,
    "madrid": "2026-09-02T09:16:53+02:00",
    "utc": "2026-09-02T07:16:53.268Z"
  },
  "timeZone": "Europe/Madrid",
  "dataType": "STATIC",
  "declaredDataType": "STATIC",
  "observedAt": null,
  "retrievedAt": {
    "epochMs": 1788333413268,
    "madrid": "2026-09-02T09:16:53+02:00",
    "utc": "2026-09-02T07:16:53.268Z"
  },
  "validThrough": null,
  "validUntil": null,
  "timestampContract": {
    "observedAt": "Instante de la medición o cálculo en la fuente. null = la fuente no fecha el dato.",
    "retrievedAt": "Instante en que VamosAlicante ha servido esta respuesta. No es la hora de la medición.",
    "validUntil": "TTL explícito: pasada esta hora el dato se entrega como STALE."
  },
  "ttlSeconds": 3600,
  "freshness": {
    "state": "UNDATED",
    "ageSeconds": null,
    "ttlRemainingSeconds": null
  },
  "source": {
    "name": "VamosAlicante",
    "url": "https://vamosalicante.com/api/public/v1"
  },
  "attribution": "VamosAlicante (https://vamosalicante.com)",
  "license": "Uso libre para lectura y citación con atribución y enlace a la URL canónica. Reventa de los datos no autorizada.",
  "data": {
    "base": "https://vamosalicante.com/api/public/v1",
    "openapi": "https://vamosalicante.com/api/public/v1/openapi.json",
    "documentation": "https://vamosalicante.com/data-methodology",
    "manifest": "https://vamosalicante.com/llms.txt",
    "authentication": "none",
    "accessPolicy": {
      "url": "https://vamosalicante.com/api/public/v1/policy",
      "principle": "El acceso resuelve una necesidad concreta del usuario. Se permite el uso de los datos; no se permite la exportación del inventario.",
      "proportionality": "El volumen entregado es proporcional a la necesidad. Sin parámetro de acotación se devuelve una respuesta resumida con la URL canónica, no el inventario.",
      "cumulativeControl": "Cada cliente se evalúa por su historial reciente (ventana de 60 minutos): número de consultas, entidades únicas por sector, proporción de entidades distintas y patrón de enumeración.",
      "windowMinutes": 60,
      "blocked": [
        "Enumerar todas las paradas, fichas o cartas de un sector.",
        "Recorrer identificadores de forma secuencial para reconstruir un catálogo.",
        "Descargas o exportaciones masivas de contenido, fotografías o multimedia.",
        "Series de consultas que, acumuladas, extraen un sector completo."
      ],
      "decisions": [
        "allow: respuesta completa dentro del límite del endpoint.",
        "summarize: respuesta resumida por falta de acotación o por historial de enumeración.",
        "quota_exceeded (429): se ha agotado la cuota de la ventana; reintentar más tarde.",
        "bulk_extraction_blocked (403): el patrón acumulado equivale a reconstruir un inventario.",
        "scope_required (403): el volumen pedido exige un nivel de acceso superior."
      ]
    },
    "methods": [
      "GET"
    ],
    "contract": {
      "timeZone": "Europe/Madrid",
      "dataTypes": {
        "LIVE": "Observación medida en la fuente oficial.",
        "CALCULATED": "Cálculo sobre horario oficial publicado.",
        "CATALOG": "Ficha estática, sin medición.",
        "STATIC": "Metadatos del propio contrato."
      },
      "emptyResults": "Si no hay dato, `data` viene vacío y `dataType` lo declara. Nunca se devuelven valores de relleno.",
      "versioning": "Los campos existentes no cambian de significado dentro de v1. Cualquier ruptura se publica en /api/public/v2."
    },
    "sections": [
      {
        "key": "meta",
        "label": "Contrato y descubrimiento",
        "description": "Índice, esquema OpenAPI y resolución de consultas a URLs canónicas.",
        "canonical": "https://vamosalicante.com/buscar",
        "endpoints": [
          "/api/public/v1",
          "/api/public/v1/openapi.json",
          "/api/public/v1/policy",
          "/api/public/v1/search",
          "/api/public/v1/resolve",
          "/api/public/v1/state"
        ],
        "announced": []
      },
      {
        "key": "parkings",
        "label": "Parkings",
        "description": "Plazas libres, tarifas y horarios de los aparcamientos públicos.",
        "canonical": "https://vamosalicante.com/car-park",
        "endpoints": [
          "/api/public/v1/parkings"
        ],
        "announced": []
      },
      {
        "key": "clima",
        "label": "Clima",
        "description": "Tiempo actual, mar y avisos oficiales.",
        "canonical": "https://vamosalicante.com/weather",
        "endpoints": [
          "/api/public/v1/weather/now",
          "/api/public/v1/weather/alerts"
        ],
        "announced": []
      },
      {
        "key": "comer",
        "label": "Comer",
        "description": "Restaurantes, cocinas, platos y precios.",
        "canonical": "https://vamosalicante.com/food-guide",
        "endpoints": [
          "/api/public/v1/food/places",
          "/api/public/v1/food/search"
        ],
        "announced": []
      },
      {
        "key": "dormir",
        "label": "Dormir",
        "description": "Hoteles y alojamientos con ubicación y precio cuando existe.",
        "canonical": "https://vamosalicante.com/accommodation",
        "endpoints": [
          "/api/public/v1/accommodation/hotels"
        ],
        "announced": []
      },
      {
        "key": "playas",
        "label": "Playas",
        "description": "Playas y calas con bandera del día y servicios.",
        "canonical": "https://vamosalicante.com/beach-guide",
        "endpoints": [
          "/api/public/v1/beaches",
          "/api/public/v1/beaches/flags"
        ],
        "announced": []
      },
      {
        "key": "comprar",
        "label": "Comprar",
        "description": "Comercios, mercados y zonas comerciales por barrio.",
        "canonical": "https://vamosalicante.com/shopping",
        "endpoints": [
          "/api/public/v1/shopping/zones",
          "/api/public/v1/shopping/businesses"
        ],
        "announced": []
      },
      {
        "key": "tomar-algo",
        "label": "Tomar algo",
        "description": "Bares, terrazas y locales nocturnos.",
        "canonical": "https://vamosalicante.com/nightlife",
        "endpoints": [
          "/api/public/v1/nightlife/places"
        ],
        "announced": []
      },
      {
        "key": "transporte",
        "label": "Transporte",
        "description": "Bus urbano, TRAM, tren, bus de larga distancia, alquiler de vehículos y carburantes.",
        "canonical": "https://vamosalicante.com/transit",
        "endpoints": [
          "/api/public/v1/bus/lines",
          "/api/public/v1/bus/stops",
          "/api/public/v1/bus/arrivals",
          "/api/public/v1/bus/live-arrivals",
          "/api/public/v1/mobility/catch-decision",
          "/api/public/v1/tram/stations",
          "/api/public/v1/tram/departures",
          "/api/public/v1/train/departures",
          "/api/public/v1/coach/routes",
          "/api/public/v1/coach/departures",
          "/api/public/v1/car-rental/offices",
          "/api/public/v1/fuel/prices"
        ],
        "announced": []
      },
      {
        "key": "vuelos",
        "label": "Vuelos",
        "description": "Salidas, llegadas y estado de los vuelos del aeropuerto Alicante-Elche (ALC).",
        "canonical": "https://vamosalicante.com/air-travel",
        "endpoints": [
          "/api/public/v1/flights"
        ],
        "announced": []
      },
      {
        "key": "salud",
        "label": "Salud",
        "description": "Farmacias de guardia, hospitales y centros sanitarios.",
        "canonical": "https://vamosalicante.com/medical-care",
        "endpoints": [
          "/api/public/v1/health/pharmacies",
          "/api/public/v1/health/centers"
        ],
        "announced": []
      },
      {
        "key": "ocio",
        "label": "Ocio",
        "description": "Cartelera de cines, conciertos, teatro y eventos.",
        "canonical": "https://vamosalicante.com/entertainment",
        "endpoints": [
          "/api/public/v1/events",
          "/api/public/v1/cinema/showtimes"
        ],
        "announced": []
      },
      {
        "key": "viajero",
        "label": "Viajero",
        "description": "Qué hacer, taxis, autobús C6 al aeropuerto y consignas de equipaje.",
        "canonical": "https://vamosalicante.com/tourists",
        "endpoints": [
          "/api/public/v1/tourism/places",
          "/api/public/v1/taxi/stops",
          "/api/public/v1/taxi/tariffs",
          "/api/public/v1/bus/c6",
          "/api/public/v1/luggage-storage"
        ],
        "announced": []
      },
      {
        "key": "mi-parada-favorita",
        "label": "Mi parada favorita",
        "description": "Ficha de una parada de bus urbano con sus próximas llegadas.",
        "canonical": "https://vamosalicante.com/preferred-bus-stop",
        "endpoints": [
          "/api/public/v1/favorite-stop"
        ],
        "announced": []
      },
      {
        "key": "mapas-3d",
        "label": "Mapas 3D",
        "description": "Capas del mapa interactivo de Alicante (transporte, parkings, ORA, playas).",
        "canonical": "https://vamosalicante.com/virtual-map",
        "endpoints": [
          "/api/public/v1/maps3d/layers"
        ],
        "announced": []
      }
    ],
    "endpoints": [
      {
        "path": "/api/public/v1",
        "url": "https://vamosalicante.com/api/public/v1",
        "summary": "Índice de la API",
        "dataType": "STATIC",
        "ttlSeconds": 3600,
        "params": [],
        "access": {
          "class": "meta",
          "boundingParams": [],
          "defaultLimit": 0,
          "maxLimit": 0,
          "highValue": false
        },
        "source": "VamosAlicante",
        "section": "meta"
      },
      {
        "path": "/api/public/v1/openapi.json",
        "url": "https://vamosalicante.com/api/public/v1/openapi.json",
        "summary": "Esquema OpenAPI 3.1",
        "dataType": "STATIC",
        "ttlSeconds": 3600,
        "params": [],
        "access": {
          "class": "meta",
          "boundingParams": [],
          "defaultLimit": 0,
          "maxLimit": 0,
          "highValue": false
        },
        "source": "VamosAlicante",
        "section": "meta"
      },
      {
        "path": "/api/public/v1/policy",
        "url": "https://vamosalicante.com/api/public/v1/policy",
        "summary": "Política de acceso y salida de datos para agentes IA",
        "dataType": "STATIC",
        "ttlSeconds": 3600,
        "params": [],
        "access": {
          "class": "meta",
          "boundingParams": [],
          "defaultLimit": 0,
          "maxLimit": 0,
          "highValue": false
        },
        "canonical": "https://vamosalicante.com/data-methodology",
        "source": "VamosAlicante",
        "section": "meta"
      },
      {
        "path": "/api/public/v1/search",
        "url": "https://vamosalicante.com/api/public/v1/search",
        "summary": "Buscador del sitio",
        "dataType": "CATALOG",
        "ttlSeconds": 600,
        "params": [
          {
            "name": "q",
            "required": true,
            "description": "Consulta libre.",
            "example": "parking cerca del teatro"
          }
        ],
        "access": {
          "class": "inventory",
          "boundingParams": [
            "q"
          ],
          "defaultLimit": 10,
          "maxLimit": 20,
          "highValue": false
        },
        "canonical": "https://vamosalicante.com/buscar",
        "source": "VamosAlicante",
        "section": "meta"
      },
      {
        "path": "/api/public/v1/resolve",
        "url": "https://vamosalicante.com/api/public/v1/resolve",
        "summary": "Resolución de entidades por nombre aproximado",
        "dataType": "CATALOG",
        "ttlSeconds": 3600,
        "params": [
          {
            "name": "q",
            "required": true,
            "description": "Nombre aproximado de la entidad, tal como lo dice el usuario.",
            "example": "paradis"
          },
          {
            "name": "type",
            "required": false,
            "description": "Restringe el tipo: parking, tram-stop, bus-stop o beach.",
            "example": "tram-stop"
          },
          {
            "name": "limit",
            "required": false,
            "description": "Elementos por respuesta. Por defecto 5. Máximo 10 elementos. Pedir más devuelve 403 scope_required.",
            "example": "5"
          }
        ],
        "access": {
          "class": "inventory",
          "boundingParams": [
            "q",
            "type"
          ],
          "defaultLimit": 5,
          "maxLimit": 10,
          "highValue": false
        },
        "canonical": "https://vamosalicante.com/buscar",
        "source": "VamosAlicante",
        "section": "meta"
      },
      {
        "path": "/api/public/v1/state",
        "url": "https://vamosalicante.com/api/public/v1/state",
        "summary": "Estado actual de una entidad concreta",
        "dataType": "LIVE",
        "ttlSeconds": 60,
        "params": [
          {
            "name": "entity_id",
            "required": true,
            "description": "Identificador `<tipo>:<id>` devuelto por /api/public/v1/resolve.",
            "example": "parking:mercado"
          }
        ],
        "access": {
          "class": "entity",
          "boundingParams": [
            "entity_id"
          ],
          "defaultLimit": 20,
          "maxLimit": 40,
          "highValue": false
        },
        "canonical": "https://vamosalicante.com/buscar",
        "source": "VamosAlicante (agrega fuentes oficiales por sector)",
        "section": "meta"
      },
      {
        "path": "/api/public/v1/parkings",
        "url": "https://vamosalicante.com/api/public/v1/parkings",
        "summary": "Plazas libres en parkings de Alicante",
        "dataType": "LIVE",
        "ttlSeconds": 180,
        "params": [],
        "access": {
          "class": "bounded",
          "boundingParams": [],
          "defaultLimit": 40,
          "maxLimit": 40,
          "highValue": false
        },
        "canonical": "https://vamosalicante.com/parkings-libres-ahora",
        "source": "Ayuntamiento de Alicante (movilidad.alicante.es)",
        "section": "parkings"
      },
      {
        "path": "/api/public/v1/weather/now",
        "url": "https://vamosalicante.com/api/public/v1/weather/now",
        "summary": "Tiempo actual, previsión y mar",
        "dataType": "LIVE",
        "ttlSeconds": 600,
        "params": [],
        "access": {
          "class": "bounded",
          "boundingParams": [],
          "defaultLimit": 1,
          "maxLimit": 1,
          "highValue": false
        },
        "canonical": "https://vamosalicante.com/weather",
        "source": "Open-Meteo (modelo) y Open-Meteo Marine",
        "section": "clima"
      },
      {
        "path": "/api/public/v1/weather/alerts",
        "url": "https://vamosalicante.com/api/public/v1/weather/alerts",
        "summary": "Avisos meteorológicos oficiales (AEMET)",
        "dataType": "LIVE",
        "ttlSeconds": 600,
        "params": [],
        "access": {
          "class": "bounded",
          "boundingParams": [],
          "defaultLimit": 20,
          "maxLimit": 20,
          "highValue": false
        },
        "canonical": "https://vamosalicante.com/weather",
        "source": "AEMET",
        "section": "clima"
      },
      {
        "path": "/api/public/v1/food/places",
        "url": "https://vamosalicante.com/api/public/v1/food/places",
        "summary": "Restaurantes y locales de comida",
        "dataType": "CATALOG",
        "ttlSeconds": 3600,
        "params": [
          {
            "name": "q",
            "required": false,
            "description": "Búsqueda por nombre.",
            "example": "arroz"
          },
          {
            "name": "cuisine",
            "required": false,
            "description": "Filtra por cocina.",
            "example": "italiana"
          },
          {
            "name": "limit",
            "required": false,
            "description": "Elementos por respuesta. Por defecto 5. Máximo 15 elementos. Pedir más devuelve 403 scope_required.",
            "example": "5"
          }
        ],
        "access": {
          "class": "inventory",
          "boundingParams": [
            "q",
            "cuisine"
          ],
          "defaultLimit": 5,
          "maxLimit": 15,
          "highValue": true
        },
        "canonical": "https://vamosalicante.com/food-guide",
        "source": "VamosAlicante sobre fichas públicas de los locales",
        "section": "comer"
      },
      {
        "path": "/api/public/v1/food/search",
        "url": "https://vamosalicante.com/api/public/v1/food/search",
        "summary": "Buscador gastronómico (plato o cocina)",
        "dataType": "CALCULATED",
        "ttlSeconds": 600,
        "params": [
          {
            "name": "q",
            "required": true,
            "description": "Consulta gastronómica.",
            "example": "arroz a banda"
          },
          {
            "name": "limit",
            "required": false,
            "description": "Elementos por respuesta. Por defecto 5. Máximo 15 elementos. Pedir más devuelve 403 scope_required.",
            "example": "5"
          }
        ],
        "access": {
          "class": "inventory",
          "boundingParams": [
            "q"
          ],
          "defaultLimit": 5,
          "maxLimit": 15,
          "highValue": true
        },
        "canonical": "https://vamosalicante.com/food-guide",
        "source": "Motor gastronómico de VamosAlicante sobre cartas publicadas",
        "section": "comer"
      },
      {
        "path": "/api/public/v1/accommodation/hotels",
        "url": "https://vamosalicante.com/api/public/v1/accommodation/hotels",
        "summary": "Hoteles y alojamientos",
        "dataType": "CATALOG",
        "ttlSeconds": 1800,
        "params": [
          {
            "name": "q",
            "required": false,
            "description": "Búsqueda por nombre."
          },
          {
            "name": "stars",
            "required": false,
            "description": "Categoría mínima en estrellas.",
            "example": "4"
          },
          {
            "name": "zone",
            "required": false,
            "description": "Barrio o zona del alojamiento.",
            "example": "centro"
          },
          {
            "name": "limit",
            "required": false,
            "description": "Elementos por respuesta. Por defecto 6. Máximo 20 elementos. Pedir más devuelve 403 scope_required.",
            "example": "6"
          }
        ],
        "access": {
          "class": "inventory",
          "boundingParams": [
            "q",
            "stars",
            "zone"
          ],
          "defaultLimit": 6,
          "maxLimit": 20,
          "highValue": false
        },
        "canonical": "https://vamosalicante.com/accommodation",
        "source": "VamosAlicante sobre fichas de alojamiento y proveedores de reserva",
        "section": "dormir"
      },
      {
        "path": "/api/public/v1/beaches",
        "url": "https://vamosalicante.com/api/public/v1/beaches",
        "summary": "Playas y calas de la provincia",
        "dataType": "CATALOG",
        "ttlSeconds": 86400,
        "params": [
          {
            "name": "q",
            "required": false,
            "description": "Búsqueda por nombre de playa o cala.",
            "example": "Postiguet"
          },
          {
            "name": "municipality",
            "required": false,
            "description": "Filtra por municipio.",
            "example": "Alicante"
          },
          {
            "name": "limit",
            "required": false,
            "description": "Elementos por respuesta. Por defecto 10. Máximo 25 elementos. Pedir más devuelve 403 scope_required.",
            "example": "10"
          }
        ],
        "access": {
          "class": "inventory",
          "boundingParams": [
            "q",
            "municipality"
          ],
          "defaultLimit": 10,
          "maxLimit": 25,
          "highValue": false
        },
        "canonical": "https://vamosalicante.com/beach-guide",
        "source": "VamosAlicante",
        "section": "playas"
      },
      {
        "path": "/api/public/v1/beaches/flags",
        "url": "https://vamosalicante.com/api/public/v1/beaches/flags",
        "summary": "Banderas de las playas de Alicante",
        "dataType": "LIVE",
        "ttlSeconds": 900,
        "params": [],
        "access": {
          "class": "bounded",
          "boundingParams": [],
          "defaultLimit": 60,
          "maxLimit": 60,
          "highValue": false
        },
        "canonical": "https://vamosalicante.com/beach-guide",
        "source": "Ayuntamiento de Alicante",
        "section": "playas"
      },
      {
        "path": "/api/public/v1/shopping/zones",
        "url": "https://vamosalicante.com/api/public/v1/shopping/zones",
        "summary": "Zonas comerciales",
        "dataType": "CATALOG",
        "ttlSeconds": 86400,
        "params": [
          {
            "name": "q",
            "required": false,
            "description": "Búsqueda por nombre de zona comercial.",
            "example": "centro"
          },
          {
            "name": "limit",
            "required": false,
            "description": "Elementos por respuesta. Por defecto 12. Máximo 25 elementos. Pedir más devuelve 403 scope_required.",
            "example": "12"
          }
        ],
        "access": {
          "class": "inventory",
          "boundingParams": [
            "q"
          ],
          "defaultLimit": 12,
          "maxLimit": 25,
          "highValue": false
        },
        "canonical": "https://vamosalicante.com/shopping",
        "source": "VamosAlicante",
        "section": "comprar"
      },
      {
        "path": "/api/public/v1/shopping/businesses",
        "url": "https://vamosalicante.com/api/public/v1/shopping/businesses",
        "summary": "Comercios por zona y sector",
        "dataType": "CATALOG",
        "ttlSeconds": 3600,
        "params": [
          {
            "name": "q",
            "required": false,
            "description": "Búsqueda por nombre o marca."
          },
          {
            "name": "zone",
            "required": false,
            "description": "Slug de la zona comercial.",
            "example": "centro"
          },
          {
            "name": "sector",
            "required": false,
            "description": "Slug del sector comercial (ver /api/public/v1/shopping/zones y la guía de compras).",
            "example": "comercio-servicios"
          },
          {
            "name": "limit",
            "required": false,
            "description": "Elementos por respuesta. Por defecto 6. Máximo 20 elementos. Pedir más devuelve 403 scope_required.",
            "example": "6"
          }
        ],
        "access": {
          "class": "inventory",
          "boundingParams": [
            "q",
            "zone",
            "sector"
          ],
          "defaultLimit": 6,
          "maxLimit": 20,
          "highValue": false
        },
        "canonical": "https://vamosalicante.com/shopping",
        "source": "VamosAlicante sobre fichas públicas de los comercios",
        "section": "comprar"
      },
      {
        "path": "/api/public/v1/nightlife/places",
        "url": "https://vamosalicante.com/api/public/v1/nightlife/places",
        "summary": "Bares, cervecerías, cocktelerías y discotecas",
        "dataType": "CATALOG",
        "ttlSeconds": 3600,
        "params": [
          {
            "name": "q",
            "required": false,
            "description": "Búsqueda por nombre."
          },
          {
            "name": "kind",
            "required": false,
            "description": "Tipo de local: bar | cocktail_bar | cerveceria | discoteca.",
            "example": "cocktail_bar"
          },
          {
            "name": "limit",
            "required": false,
            "description": "Elementos por respuesta. Por defecto 6. Máximo 20 elementos. Pedir más devuelve 403 scope_required.",
            "example": "6"
          }
        ],
        "access": {
          "class": "inventory",
          "boundingParams": [
            "q",
            "kind"
          ],
          "defaultLimit": 6,
          "maxLimit": 20,
          "highValue": false
        },
        "canonical": "https://vamosalicante.com/nightlife",
        "source": "VamosAlicante sobre fichas públicas de los locales",
        "section": "tomar-algo"
      },
      {
        "path": "/api/public/v1/bus/lines",
        "url": "https://vamosalicante.com/api/public/v1/bus/lines",
        "summary": "Líneas de bus urbano de Alicante",
        "dataType": "CATALOG",
        "ttlSeconds": 86400,
        "params": [
          {
            "name": "q",
            "required": false,
            "description": "Búsqueda por nombre de línea.",
            "example": "playa"
          },
          {
            "name": "line",
            "required": false,
            "description": "Código de una línea concreta.",
            "example": "2"
          },
          {
            "name": "limit",
            "required": false,
            "description": "Elementos por respuesta. Por defecto 10. Máximo 20 elementos. Pedir más devuelve 403 scope_required.",
            "example": "10"
          }
        ],
        "access": {
          "class": "inventory",
          "boundingParams": [
            "q",
            "line"
          ],
          "defaultLimit": 10,
          "maxLimit": 20,
          "highValue": false
        },
        "canonical": "https://vamosalicante.com/citybus",
        "source": "Vectalia / Alicante se mueve",
        "section": "transporte"
      },
      {
        "path": "/api/public/v1/bus/stops",
        "url": "https://vamosalicante.com/api/public/v1/bus/stops",
        "summary": "Paradas de bus urbano",
        "dataType": "CATALOG",
        "ttlSeconds": 86400,
        "params": [
          {
            "name": "q",
            "required": false,
            "description": "Búsqueda por nombre de parada.",
            "example": "Luceros"
          },
          {
            "name": "line",
            "required": false,
            "description": "Filtra las paradas de una línea.",
            "example": "2"
          },
          {
            "name": "stop",
            "required": false,
            "description": "Código oficial de una parada concreta.",
            "example": "1010"
          },
          {
            "name": "limit",
            "required": false,
            "description": "Elementos por respuesta. Por defecto 8. Máximo 20 elementos. Pedir más devuelve 403 scope_required.",
            "example": "8"
          }
        ],
        "access": {
          "class": "inventory",
          "boundingParams": [
            "q",
            "line",
            "stop"
          ],
          "defaultLimit": 8,
          "maxLimit": 20,
          "highValue": false
        },
        "canonical": "https://vamosalicante.com/citybus",
        "source": "Vectalia / Alicante se mueve",
        "section": "transporte"
      },
      {
        "path": "/api/public/v1/bus/arrivals",
        "url": "https://vamosalicante.com/api/public/v1/bus/arrivals",
        "summary": "Próximas llegadas de bus a una parada",
        "dataType": "LIVE",
        "ttlSeconds": 30,
        "params": [
          {
            "name": "stop",
            "required": true,
            "description": "Código oficial de la parada.",
            "example": "1010"
          },
          {
            "name": "line",
            "required": false,
            "description": "Filtra por línea.",
            "example": "2"
          },
          {
            "name": "direction",
            "required": false,
            "description": "Filtra el sentido tal como lo publica el operador. Omítelo para recibir ambos sentidos."
          }
        ],
        "access": {
          "class": "entity",
          "boundingParams": [
            "stop"
          ],
          "defaultLimit": 20,
          "maxLimit": 40,
          "highValue": false
        },
        "canonical": "https://vamosalicante.com/citybus",
        "source": "Vectalia / Alicante se mueve (tiempo real)",
        "section": "transporte"
      },
      {
        "path": "/api/public/v1/bus/live-arrivals",
        "url": "https://vamosalicante.com/api/public/v1/bus/live-arrivals",
        "summary": "Próximo paso de bus consultado en tiempo real bajo demanda",
        "dataType": "LIVE",
        "ttlSeconds": 30,
        "params": [
          {
            "name": "stop",
            "required": true,
            "description": "Código oficial de la parada o su nombre (por ejemplo `Franciscanas`).",
            "example": "5101"
          },
          {
            "name": "line",
            "required": false,
            "description": "Filtra por línea.",
            "example": "2"
          },
          {
            "name": "mode",
            "required": false,
            "description": "`announce` devuelve status=live_query sin tocar la fuente, para avisar de que la consulta está en curso."
          },
          {
            "name": "estimate",
            "required": false,
            "description": "`1` añade `estimated_eta` del motor propio cuando la fuente no publica dato en vivo."
          }
        ],
        "access": {
          "class": "entity",
          "boundingParams": [
            "stop"
          ],
          "defaultLimit": 20,
          "maxLimit": 40,
          "highValue": true
        },
        "canonical": "https://vamosalicante.com/citybus",
        "source": "Alicante se mueve (movilidad.alicante.es, tiempo real bajo demanda)",
        "section": "transporte"
      },
      {
        "path": "/api/public/v1/mobility/catch-decision",
        "url": "https://vamosalicante.com/api/public/v1/mobility/catch-decision",
        "summary": "¿Me da tiempo a coger este bus?",
        "dataType": "LIVE",
        "ttlSeconds": 30,
        "params": [
          {
            "name": "stop",
            "required": true,
            "description": "Código oficial de la parada o su nombre.",
            "example": "5101"
          },
          {
            "name": "lat",
            "required": false,
            "description": "Latitud actual del usuario (alternativa a `walk_minutes`).",
            "example": "38.3452"
          },
          {
            "name": "lng",
            "required": false,
            "description": "Longitud actual del usuario (alternativa a `walk_minutes`).",
            "example": "-0.4815"
          },
          {
            "name": "walk_minutes",
            "required": false,
            "description": "Minutos a pie hasta la parada, si el agente no tiene coordenadas.",
            "example": "4"
          },
          {
            "name": "line",
            "required": false,
            "description": "Línea concreta.",
            "example": "12"
          },
          {
            "name": "walk_speed_ms",
            "required": false,
            "description": "Velocidad de marcha en m/s (0.5-2.5). Por defecto 1.35."
          },
          {
            "name": "buffer_seconds",
            "required": false,
            "description": "Colchón de seguridad en segundos. Por defecto 30."
          }
        ],
        "access": {
          "class": "entity",
          "boundingParams": [
            "stop"
          ],
          "defaultLimit": 20,
          "maxLimit": 40,
          "highValue": true
        },
        "canonical": "https://vamosalicante.com/citybus",
        "source": "Alicante se mueve (tiempo real) + motor propio de VamosAlicante",
        "section": "transporte"
      },
      {
        "path": "/api/public/v1/tram/stations",
        "url": "https://vamosalicante.com/api/public/v1/tram/stations",
        "summary": "Estaciones del TRAM de Alicante",
        "dataType": "CATALOG",
        "ttlSeconds": 86400,
        "params": [
          {
            "name": "q",
            "required": false,
            "description": "Búsqueda por nombre de estación.",
            "example": "Luceros"
          },
          {
            "name": "line_id",
            "required": false,
            "description": "Filtra las estaciones de una línea.",
            "example": "L1"
          },
          {
            "name": "stop_id",
            "required": false,
            "description": "Consulta directa por identificador GTFS."
          },
          {
            "name": "limit",
            "required": false,
            "description": "Elementos por respuesta. Por defecto 10. Máximo 25 elementos. Pedir más devuelve 403 scope_required.",
            "example": "10"
          }
        ],
        "access": {
          "class": "inventory",
          "boundingParams": [
            "q",
            "line_id",
            "stop_id"
          ],
          "defaultLimit": 10,
          "maxLimit": 25,
          "highValue": false
        },
        "canonical": "https://vamosalicante.com/citytrain",
        "source": "FGV (GTFS oficial)",
        "section": "transporte"
      },
      {
        "path": "/api/public/v1/tram/departures",
        "url": "https://vamosalicante.com/api/public/v1/tram/departures",
        "summary": "Próximas salidas de TRAM por estación",
        "dataType": "CALCULATED",
        "ttlSeconds": 60,
        "params": [
          {
            "name": "stop_id",
            "required": true,
            "description": "Identificador GTFS de la estación.",
            "example": "1"
          },
          {
            "name": "date",
            "required": false,
            "description": "Fecha YYYY-MM-DD en hora de Madrid; por defecto hoy."
          },
          {
            "name": "from",
            "required": false,
            "description": "Hora de inicio HH:MM; por defecto ahora."
          },
          {
            "name": "direction",
            "required": false,
            "description": "Sentido GTFS (0 o 1) o texto del destino. Omítelo para recibir ambos sentidos y decidir con el usuario."
          },
          {
            "name": "limit",
            "required": false,
            "description": "Elementos por respuesta. Por defecto 20. Máximo 40 elementos. Pedir más devuelve 403 scope_required.",
            "example": "20"
          }
        ],
        "access": {
          "class": "entity",
          "boundingParams": [
            "stop_id"
          ],
          "defaultLimit": 20,
          "maxLimit": 40,
          "highValue": false
        },
        "canonical": "https://vamosalicante.com/citytrain",
        "source": "FGV (GTFS oficial)",
        "section": "transporte"
      },
      {
        "path": "/api/public/v1/train/departures",
        "url": "https://vamosalicante.com/api/public/v1/train/departures",
        "summary": "Salidas y llegadas de tren en Alicante Terminal",
        "dataType": "LIVE",
        "ttlSeconds": 120,
        "params": [
          {
            "name": "type",
            "required": false,
            "description": "departures | arrivals | all (por defecto all)."
          },
          {
            "name": "limit",
            "required": false,
            "description": "Elementos por respuesta. Por defecto 40. Máximo 40 elementos. Pedir más devuelve 403 scope_required.",
            "example": "40"
          }
        ],
        "access": {
          "class": "bounded",
          "boundingParams": [],
          "defaultLimit": 40,
          "maxLimit": 40,
          "highValue": false
        },
        "canonical": "https://vamosalicante.com/railway",
        "source": "ADIF (cartelera de Alicante Terminal)",
        "section": "transporte"
      },
      {
        "path": "/api/public/v1/coach/routes",
        "url": "https://vamosalicante.com/api/public/v1/coach/routes",
        "summary": "Rutas de autobús de larga distancia",
        "dataType": "CATALOG",
        "ttlSeconds": 86400,
        "params": [
          {
            "name": "q",
            "required": false,
            "description": "Búsqueda por corredor o etiqueta de la ruta.",
            "example": "Madrid"
          },
          {
            "name": "destination",
            "required": false,
            "description": "Código o nombre del destino.",
            "example": "VLC"
          },
          {
            "name": "limit",
            "required": false,
            "description": "Elementos por respuesta. Por defecto 8. Máximo 20 elementos. Pedir más devuelve 403 scope_required.",
            "example": "8"
          }
        ],
        "access": {
          "class": "inventory",
          "boundingParams": [
            "q",
            "destination"
          ],
          "defaultLimit": 8,
          "maxLimit": 20,
          "highValue": false
        },
        "canonical": "https://vamosalicante.com/coach-travel",
        "source": "Operadores de larga distancia (ALSA y otros)",
        "section": "transporte"
      },
      {
        "path": "/api/public/v1/coach/departures",
        "url": "https://vamosalicante.com/api/public/v1/coach/departures",
        "summary": "Salidas de autobús de larga distancia",
        "dataType": "CALCULATED",
        "ttlSeconds": 900,
        "params": [
          {
            "name": "date",
            "required": false,
            "description": "Fecha YYYY-MM-DD en hora de Madrid; por defecto hoy."
          },
          {
            "name": "destination",
            "required": false,
            "description": "Búsqueda por destino.",
            "example": "Valencia"
          },
          {
            "name": "limit",
            "required": false,
            "description": "Elementos por respuesta. Por defecto 10. Máximo 25 elementos. Pedir más devuelve 403 scope_required.",
            "example": "10"
          }
        ],
        "access": {
          "class": "inventory",
          "boundingParams": [
            "destination",
            "date"
          ],
          "defaultLimit": 10,
          "maxLimit": 25,
          "highValue": false
        },
        "canonical": "https://vamosalicante.com/coach-travel",
        "source": "Operadores de larga distancia (ALSA y otros)",
        "section": "transporte"
      },
      {
        "path": "/api/public/v1/car-rental/offices",
        "url": "https://vamosalicante.com/api/public/v1/car-rental/offices",
        "summary": "Puntos de recogida de alquiler de vehículos",
        "dataType": "CATALOG",
        "ttlSeconds": 3600,
        "params": [],
        "access": {
          "class": "bounded",
          "boundingParams": [],
          "defaultLimit": 20,
          "maxLimit": 20,
          "highValue": false
        },
        "canonical": "https://vamosalicante.com/car-rental",
        "source": "VamosAlicante",
        "section": "transporte"
      },
      {
        "path": "/api/public/v1/fuel/prices",
        "url": "https://vamosalicante.com/api/public/v1/fuel/prices",
        "summary": "Precios de carburante en estaciones de servicio",
        "dataType": "LIVE",
        "ttlSeconds": 3600,
        "params": [
          {
            "name": "fuel",
            "required": false,
            "description": "Filtra por carburante.",
            "example": "gasolina95"
          },
          {
            "name": "q",
            "required": false,
            "description": "Búsqueda por rótulo o municipio.",
            "example": "Repsol"
          },
          {
            "name": "limit",
            "required": false,
            "description": "Elementos por respuesta. Por defecto 8. Máximo 20 elementos. Pedir más devuelve 403 scope_required.",
            "example": "8"
          }
        ],
        "access": {
          "class": "inventory",
          "boundingParams": [
            "q",
            "fuel"
          ],
          "defaultLimit": 8,
          "maxLimit": 20,
          "highValue": false
        },
        "canonical": "https://vamosalicante.com/gasolineras-alicante",
        "source": "Ministerio para la Transición Ecológica (precios de carburantes)",
        "section": "transporte"
      },
      {
        "path": "/api/public/v1/flights",
        "url": "https://vamosalicante.com/api/public/v1/flights",
        "summary": "Vuelos del aeropuerto Alicante-Elche (ALC)",
        "dataType": "LIVE",
        "ttlSeconds": 120,
        "params": [
          {
            "name": "type",
            "required": false,
            "description": "departures | arrivals | all (por defecto all)."
          },
          {
            "name": "city",
            "required": false,
            "description": "Búsqueda por ciudad de origen o destino.",
            "example": "Madrid"
          },
          {
            "name": "date",
            "required": false,
            "description": "Fecha YYYY-MM-DD en hora de Madrid; por defecto hoy."
          },
          {
            "name": "limit",
            "required": false,
            "description": "Elementos por respuesta. Por defecto 15. Máximo 40 elementos. Pedir más devuelve 403 scope_required.",
            "example": "15"
          }
        ],
        "access": {
          "class": "inventory",
          "boundingParams": [
            "city",
            "type",
            "date"
          ],
          "defaultLimit": 15,
          "maxLimit": 40,
          "highValue": false
        },
        "canonical": "https://vamosalicante.com/air-travel",
        "source": "Aena",
        "section": "vuelos"
      },
      {
        "path": "/api/public/v1/health/pharmacies",
        "url": "https://vamosalicante.com/api/public/v1/health/pharmacies",
        "summary": "Farmacias y farmacias de guardia",
        "dataType": "LIVE",
        "ttlSeconds": 900,
        "params": [
          {
            "name": "on_duty",
            "required": false,
            "description": "true para devolver solo las de guardia."
          },
          {
            "name": "q",
            "required": false,
            "description": "Búsqueda por nombre o dirección."
          },
          {
            "name": "limit",
            "required": false,
            "description": "Elementos por respuesta. Por defecto 8. Máximo 20 elementos. Pedir más devuelve 403 scope_required.",
            "example": "8"
          }
        ],
        "access": {
          "class": "inventory",
          "boundingParams": [
            "q",
            "on_duty"
          ],
          "defaultLimit": 8,
          "maxLimit": 20,
          "highValue": false
        },
        "canonical": "https://vamosalicante.com/medical-care",
        "source": "Colegio Oficial de Farmacéuticos de Alicante",
        "section": "salud"
      },
      {
        "path": "/api/public/v1/health/centers",
        "url": "https://vamosalicante.com/api/public/v1/health/centers",
        "summary": "Hospitales y centros sanitarios",
        "dataType": "CATALOG",
        "ttlSeconds": 86400,
        "params": [
          {
            "name": "q",
            "required": false,
            "description": "Búsqueda por nombre, especialidad o municipio."
          },
          {
            "name": "limit",
            "required": false,
            "description": "Elementos por respuesta. Por defecto 6. Máximo 20 elementos. Pedir más devuelve 403 scope_required.",
            "example": "6"
          }
        ],
        "access": {
          "class": "inventory",
          "boundingParams": [
            "q"
          ],
          "defaultLimit": 6,
          "maxLimit": 20,
          "highValue": false
        },
        "canonical": "https://vamosalicante.com/medical-care",
        "source": "Conselleria de Sanitat (Generalitat Valenciana)",
        "section": "salud"
      },
      {
        "path": "/api/public/v1/events",
        "url": "https://vamosalicante.com/api/public/v1/events",
        "summary": "Conciertos, teatro y eventos",
        "dataType": "CATALOG",
        "ttlSeconds": 1800,
        "params": [
          {
            "name": "category",
            "required": false,
            "description": "Filtra por categoría.",
            "example": "concierto"
          },
          {
            "name": "from",
            "required": false,
            "description": "Fecha mínima YYYY-MM-DD; por defecto hoy."
          },
          {
            "name": "q",
            "required": false,
            "description": "Búsqueda por título, artista o recinto.",
            "example": "teatro"
          },
          {
            "name": "limit",
            "required": false,
            "description": "Elementos por respuesta. Por defecto 8. Máximo 20 elementos. Pedir más devuelve 403 scope_required.",
            "example": "8"
          }
        ],
        "access": {
          "class": "inventory",
          "boundingParams": [
            "category",
            "from",
            "q"
          ],
          "defaultLimit": 8,
          "maxLimit": 20,
          "highValue": false
        },
        "canonical": "https://vamosalicante.com/entertainment",
        "source": "Recintos y promotores locales",
        "section": "ocio"
      },
      {
        "path": "/api/public/v1/cinema/showtimes",
        "url": "https://vamosalicante.com/api/public/v1/cinema/showtimes",
        "summary": "Cartelera de cines de Alicante",
        "dataType": "CALCULATED",
        "ttlSeconds": 1800,
        "params": [
          {
            "name": "cinema",
            "required": false,
            "description": "Slug del cine.",
            "example": "yelmo-vialia"
          },
          {
            "name": "film",
            "required": false,
            "description": "Búsqueda por título de película."
          },
          {
            "name": "limit",
            "required": false,
            "description": "Elementos por respuesta. Por defecto 10. Máximo 25 elementos. Pedir más devuelve 403 scope_required.",
            "example": "10"
          }
        ],
        "access": {
          "class": "inventory",
          "boundingParams": [
            "cinema",
            "film"
          ],
          "defaultLimit": 10,
          "maxLimit": 25,
          "highValue": false
        },
        "canonical": "https://vamosalicante.com/entertainment",
        "source": "Cines de Alicante",
        "section": "ocio"
      },
      {
        "path": "/api/public/v1/tourism/places",
        "url": "https://vamosalicante.com/api/public/v1/tourism/places",
        "summary": "Qué hacer: lugares y visitas",
        "dataType": "CATALOG",
        "ttlSeconds": 86400,
        "params": [
          {
            "name": "q",
            "required": false,
            "description": "Búsqueda por nombre."
          },
          {
            "name": "category",
            "required": false,
            "description": "Filtra por categoría."
          },
          {
            "name": "limit",
            "required": false,
            "description": "Elementos por respuesta. Por defecto 6. Máximo 20 elementos. Pedir más devuelve 403 scope_required.",
            "example": "6"
          }
        ],
        "access": {
          "class": "inventory",
          "boundingParams": [
            "q",
            "category"
          ],
          "defaultLimit": 6,
          "maxLimit": 20,
          "highValue": false
        },
        "canonical": "https://vamosalicante.com/tourists",
        "source": "VamosAlicante",
        "section": "viajero"
      },
      {
        "path": "/api/public/v1/taxi/stops",
        "url": "https://vamosalicante.com/api/public/v1/taxi/stops",
        "summary": "Paradas de taxi",
        "dataType": "CATALOG",
        "ttlSeconds": 86400,
        "params": [
          {
            "name": "q",
            "required": false,
            "description": "Búsqueda por nombre o dirección."
          },
          {
            "name": "limit",
            "required": false,
            "description": "Elementos por respuesta. Por defecto 6. Máximo 20 elementos. Pedir más devuelve 403 scope_required.",
            "example": "6"
          }
        ],
        "access": {
          "class": "inventory",
          "boundingParams": [
            "q"
          ],
          "defaultLimit": 6,
          "maxLimit": 20,
          "highValue": false
        },
        "canonical": "https://vamosalicante.com/cab-service",
        "source": "Ayuntamiento de Alicante",
        "section": "viajero"
      },
      {
        "path": "/api/public/v1/taxi/tariffs",
        "url": "https://vamosalicante.com/api/public/v1/taxi/tariffs",
        "summary": "Tarifas oficiales de taxi",
        "dataType": "CATALOG",
        "ttlSeconds": 86400,
        "params": [],
        "access": {
          "class": "bounded",
          "boundingParams": [],
          "defaultLimit": 20,
          "maxLimit": 20,
          "highValue": false
        },
        "canonical": "https://vamosalicante.com/cab-service",
        "source": "Ayuntamiento de Alicante (ordenanza del taxi)",
        "section": "viajero"
      },
      {
        "path": "/api/public/v1/bus/c6",
        "url": "https://vamosalicante.com/api/public/v1/bus/c6",
        "summary": "Autobús C6 al aeropuerto: estado y próximas salidas",
        "dataType": "CALCULATED",
        "ttlSeconds": 30,
        "params": [],
        "access": {
          "class": "bounded",
          "boundingParams": [],
          "defaultLimit": 40,
          "maxLimit": 40,
          "highValue": false
        },
        "canonical": "https://vamosalicante.com/autobus-c6-aeropuerto-alicante",
        "source": "Vectalia / Alicante se mueve (horario oficial C6)",
        "section": "viajero"
      },
      {
        "path": "/api/public/v1/luggage-storage",
        "url": "https://vamosalicante.com/api/public/v1/luggage-storage",
        "summary": "Consignas de equipaje",
        "dataType": "CATALOG",
        "ttlSeconds": 3600,
        "params": [
          {
            "name": "q",
            "required": false,
            "description": "Búsqueda por nombre o marca de la consigna.",
            "example": "bounce"
          },
          {
            "name": "limit",
            "required": false,
            "description": "Elementos por respuesta. Por defecto 6. Máximo 20 elementos. Pedir más devuelve 403 scope_required.",
            "example": "6"
          }
        ],
        "access": {
          "class": "inventory",
          "boundingParams": [
            "q"
          ],
          "defaultLimit": 6,
          "maxLimit": 20,
          "highValue": false
        },
        "canonical": "https://vamosalicante.com/consignas-equipaje-alicante",
        "source": "Operadores de consigna",
        "section": "viajero"
      },
      {
        "path": "/api/public/v1/favorite-stop",
        "url": "https://vamosalicante.com/api/public/v1/favorite-stop",
        "summary": "Ficha de una parada de bus con sus llegadas",
        "dataType": "LIVE",
        "ttlSeconds": 30,
        "params": [
          {
            "name": "stop",
            "required": true,
            "description": "Código oficial de la parada.",
            "example": "1010"
          }
        ],
        "access": {
          "class": "entity",
          "boundingParams": [
            "stop"
          ],
          "defaultLimit": 20,
          "maxLimit": 40,
          "highValue": false
        },
        "canonical": "https://vamosalicante.com/preferred-bus-stop",
        "source": "Vectalia / Alicante se mueve",
        "section": "mi-parada-favorita"
      },
      {
        "path": "/api/public/v1/maps3d/layers",
        "url": "https://vamosalicante.com/api/public/v1/maps3d/layers",
        "summary": "Capas del mapa 3D de Alicante",
        "dataType": "CATALOG",
        "ttlSeconds": 3600,
        "params": [
          {
            "name": "layer",
            "required": false,
            "description": "Devuelve los puntos de una sola capa en lugar del resumen.",
            "example": "parkings"
          },
          {
            "name": "limit",
            "required": false,
            "description": "Elementos por respuesta. Por defecto 25. Máximo 60 elementos. Pedir más devuelve 403 scope_required.",
            "example": "25"
          }
        ],
        "access": {
          "class": "inventory",
          "boundingParams": [
            "layer"
          ],
          "defaultLimit": 25,
          "maxLimit": 60,
          "highValue": true
        },
        "canonical": "https://vamosalicante.com/virtual-map",
        "source": "VamosAlicante",
        "section": "mapas-3d"
      }
    ],
    "announced": "Los endpoints listados en `sections[].announced` están declarados en el contrato y en el orden definitivo de la portada, pero su dataset aún no se publica: todavía no responden."
  }
}