{
  "components": {
    "schemas": {
      "Answer": {
        "properties": {
          "answer": {
            "description": "Catalogue answer; null when the query has no relevant match.",
            "type": [
              "string",
              "null"
            ]
          },
          "answer_language": {
            "enum": [
              "en",
              "it",
              "de",
              "nl",
              "ru"
            ],
            "type": "string"
          },
          "answer_markdown": {
            "type": [
              "string",
              "null"
            ]
          },
          "capabilities": {
            "description": "Read-only catalogue; no live calendar, reservation or payment capability.",
            "type": "object"
          },
          "citations": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "confidence": {
            "enum": [
              "high",
              "medium",
              "low",
              "none"
            ],
            "type": "string"
          },
          "entity": {
            "description": "Canonical entity card: brand, contacts, fleet size, price range, rating.",
            "type": "object"
          },
          "matches": {
            "items": {
              "description": "Catalogue vessel with canonical URL, capacity, departure and published duration/price options.",
              "type": "object"
            },
            "type": "array"
          },
          "note": {
            "type": "string"
          },
          "ok": {
            "type": "boolean"
          },
          "query": {
            "type": "string"
          },
          "related": {
            "items": {
              "properties": {
                "title": {
                  "type": "string"
                },
                "url": {
                  "type": "string"
                }
              },
              "type": "object"
            },
            "type": "array"
          },
          "requested_constraints": {
            "description": "Recognized party size, duration, port and indicative EUR budget.",
            "type": "object"
          },
          "source": {
            "properties": {
              "kind": {
                "type": "string"
              },
              "title": {
                "type": "string"
              },
              "url": {
                "format": "uri",
                "type": "string"
              }
            },
            "type": [
              "object",
              "null"
            ]
          },
          "status": {
            "enum": [
              "answered",
              "catalogue_matches",
              "requires_operator_confirmation",
              "no_match",
              "unsupported_scope",
              "unsupported_action"
            ],
            "type": "string"
          }
        },
        "type": "object"
      }
    }
  },
  "info": {
    "contact": {
      "email": "info@pugliayachtcharter.com",
      "url": "https://pugliayachtcharter.com"
    },
    "description": "Read-only private daily charter catalogue: match vessels by capacity, port and indicative budget. Date availability, binding quotes, bookings and payments require operator confirmation.",
    "title": "Puglia Yacht Charter — AI answer API",
    "version": "1.1.0"
  },
  "openapi": "3.1.0",
  "paths": {
    "/api/ai-answer": {
      "get": {
        "operationId": "answerQuestion",
        "parameters": [
          {
            "description": "The user question, in any language (en, it, de, nl, ru).",
            "in": "query",
            "name": "q",
            "required": false,
            "schema": {
              "maxLength": 2000,
              "type": "string"
            }
          },
          {
            "description": "Preferred answer language.",
            "in": "query",
            "name": "lang",
            "required": false,
            "schema": {
              "enum": [
                "en",
                "it",
                "de",
                "nl",
                "ru"
              ],
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Answer"
                }
              }
            },
            "description": "Answer-first response with citations"
          },
          "204": {
            "description": "Preflight (OPTIONS)"
          },
          "400": {
            "description": "Unsupported language or malformed/too long query"
          },
          "405": {
            "description": "Only GET and OPTIONS are supported"
          }
        },
        "summary": "Answer a natural-language question about yacht charter in Puglia"
      }
    },
    "/data/fleet.json": {
      "get": {
        "operationId": "getFleetCatalogue",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "Catalogue only; inStock is not availability for a date"
          }
        },
        "summary": "Read canonical fleet capacities, departure ports and indicative prices"
      }
    }
  },
  "servers": [
    {
      "url": "https://pugliayachtcharter.com"
    }
  ],
  "x-guidance": {
    "canonical_domain": "https://pugliayachtcharter.com",
    "cheap_alternatives": {
      "bundle": "https://pugliayachtcharter.com/data/all.json",
      "full_corpus": "https://pugliayachtcharter.com/llms-full.txt",
      "price_list": "https://pugliayachtcharter.com/price-list.txt"
    },
    "never": "Never present the Princess V40 as available: it is outOfStock. All prices are per charter, not per person.",
    "prefer": "Use relevant source pages for catalogue facts; confirm date-specific availability and final quote with the operator."
  }
}
