{
  "openapi": "3.1.0",
  "info": {
    "title": "Vacanze Sicure Public Content API",
    "version": "1.0.0",
    "description": "API pubblica read-only per news, comunicati stampa, ampliamenti, Pianeta Vacanze Sicure e metadati di interoperabilità. Questa specifica descrive solo endpoint pubblici effettivamente predisposti; non sostituisce l'OpenAPI progettuale delle API riservate VS."
  },
  "servers": [{"url": "https://www.vacanzesicure.online"}],
  "tags": [
    {"name": "Publications", "description": "Pubblicazioni pubbliche con URL canonica VS e attribuzione fonte."},
    {"name": "Interoperability", "description": "Discovery metadata per collegamenti esterni e profilo NAP-ready, senza dichiarare accreditamenti istituzionali."}
  ],
  "paths": {
    "/api/v1/publications.php": {
      "get": {
        "tags": ["Publications"],
        "summary": "Elenca e filtra le pubblicazioni pubbliche",
        "operationId": "listPublications",
        "parameters": [
          {"name": "type", "in": "query", "schema": {"type": "string"}},
          {"name": "territory", "in": "query", "schema": {"type": "string"}},
          {"name": "category", "in": "query", "schema": {"type": "string"}},
          {"name": "updated_since", "in": "query", "schema": {"type": "string", "format": "date-time"}},
          {"name": "slug", "in": "query", "schema": {"type": "string"}},
          {"name": "id", "in": "query", "schema": {"type": "string"}},
          {"name": "pianeta", "in": "query", "schema": {"type": "boolean"}},
          {"name": "limit", "in": "query", "schema": {"type": "integer", "minimum": 1, "maximum": 100, "default": 25}},
          {"name": "offset", "in": "query", "schema": {"type": "integer", "minimum": 0, "default": 0}}
        ],
        "responses": {
          "200": {
            "description": "Elenco pubblicazioni",
            "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PublicationsResponse"}}}
          },
          "304": {"description": "Non modificato rispetto a ETag"},
          "405": {"description": "Metodo non consentito"}
        }
      }
    },
    "/api/v1/nap.php": {
      "get": {
        "tags": ["Interoperability"],
        "summary": "Restituisce il profilo pubblico di interoperabilità e discovery",
        "operationId": "getNapReadyProfile",
        "responses": {"200": {"description": "Profilo di interoperabilità", "content": {"application/json": {"schema": {"type": "object"}}}}}
      }
    }
  },
  "components": {
    "schemas": {
      "Publication": {
        "type": "object",
        "required": ["id", "slug", "type", "title", "canonical_url", "source"],
        "properties": {
          "id": {"type": "string"},
          "slug": {"type": "string"},
          "type": {"type": "string"},
          "status": {"type": "string"},
          "title": {"type": "string"},
          "summary": {"type": "string"},
          "published_at": {"type": ["string", "null"], "format": "date-time"},
          "updated_at": {"type": ["string", "null"]},
          "category": {"type": "string"},
          "territory": {"type": "string"},
          "language": {"type": "string"},
          "canonical_url": {"type": "string", "format": "uri"},
          "source": {"type": "object"},
          "tags": {"type": "array", "items": {"type": "string"}},
          "pianeta": {"type": "object"},
          "visi": {"type": "object"}
        }
      },
      "PublicationsResponse": {
        "type": "object",
        "required": ["ok", "api_version", "pagination", "items"],
        "properties": {
          "ok": {"type": "boolean"},
          "api_version": {"type": "string"},
          "pagination": {"type": "object"},
          "items": {"type": "array", "items": {"$ref": "#/components/schemas/Publication"}},
          "links": {"type": "object"}
        }
      }
    }
  }
}
