{
  "schemaVersion": "1.0",
  "apiVersion": "1.2",
  "name": "Hotel Bergsonne Allgäu Booking API",
  "mcpEndpoint": "https://bergsonne-allgaeu.de/api/booking-mcp",
  "openapi": "https://bergsonne-allgaeu.de/api/openapi",
  "description": "Machine-actionable booking API for AI agents. Search availability, get pricing, and create reservations. All query parameters are case-insensitive. roomId values are room type abbreviation codes (e.g. KAPDZ, KDZ, KFZ, SDZ) returned by the availability endpoint. Dates accept multiple formats: YYYY-MM-DD, DD.MM.YYYY, MM/DD/YYYY, or natural language like 'February 22, 2026'. All prices are in EUR, inclusive of VAT.",
  "baseUrl": "https://bergsonne-allgaeu.de/api/booking",
  "factSheet": "https://bergsonne-allgaeu.de/fact-sheet",
  "nlweb": "https://bergsonne-allgaeu.de/.well-known/nlweb.json",
  "_pricing": {
    "currency": "EUR",
    "taxIncluded": true,
    "note": "All prices are per room per night, inclusive of VAT. City tax (Kurtaxe) is collected at the hotel."
  },
  "actions": [
    {
      "name": "getHotelDetails",
      "mcpToolName": "get_hotel_details",
      "description": "Fetch hotel metadata, amenities, images, check-in/out times, and room types with abbreviation codes (roomId)",
      "method": "GET",
      "params": { "action": "hotel" },
      "exampleUrl": "https://bergsonne-allgaeu.de/api/booking?action=hotel",
      "inputSchema": {
        "type": "object",
        "properties": {
          "action": { "type": "string", "const": "hotel" }
        },
        "required": ["action"]
      }
    },
    {
      "name": "searchAvailability",
      "mcpToolName": "search_availability",
      "description": "Search room availability and pricing for given dates and guests. Returns a roomTypes array with roomId codes (e.g. KAPDZ, KDZ, KFZ, SDZ) to use for getPriceQuote and createBooking. Dates accept YYYY-MM-DD, DD.MM.YYYY, MM/DD/YYYY, or natural language.",
      "method": "GET",
      "params": {
        "action": "availability",
        "checkIn": "YYYY-MM-DD (required)",
        "checkOut": "YYYY-MM-DD (required)",
        "adults": "number (required)",
        "children": "number (optional, default 0)"
      },
      "exampleUrl": "https://bergsonne-allgaeu.de/api/booking?action=availability&checkIn=2026-02-22&checkOut=2026-02-24&adults=2",
      "inputSchema": {
        "type": "object",
        "properties": {
          "action": { "type": "string", "const": "availability" },
          "checkIn": { "type": "string", "description": "Check-in date (YYYY-MM-DD)" },
          "checkOut": { "type": "string", "description": "Check-out date (YYYY-MM-DD)" },
          "adults": { "type": "integer", "minimum": 1 },
          "children": { "type": "integer", "minimum": 0, "default": 0 }
        },
        "required": ["action", "checkIn", "checkOut", "adults"]
      }
    },
    {
      "name": "getPriceQuote",
      "mcpToolName": "get_price_quote",
      "description": "Get a nightly price breakdown for a specific room type. roomId must be an abbreviation code from searchAvailability results (e.g. KAPDZ, KDZ, KFZ, SDZ).",
      "method": "GET",
      "params": {
        "action": "price-quote",
        "roomId": "string (required, abbreviation code e.g. KAPDZ)",
        "checkIn": "YYYY-MM-DD (required)",
        "checkOut": "YYYY-MM-DD (required)",
        "adults": "number (required)"
      },
      "exampleUrl": "https://bergsonne-allgaeu.de/api/booking?action=price-quote&roomId=KAPDZ&checkIn=2026-02-22&checkOut=2026-02-24&adults=2",
      "inputSchema": {
        "type": "object",
        "properties": {
          "action": { "type": "string", "const": "price-quote" },
          "roomId": { "type": "string", "enum": ["KAPDZ", "KDZ", "KFZ", "SDZ"] },
          "checkIn": { "type": "string" },
          "checkOut": { "type": "string" },
          "adults": { "type": "integer", "minimum": 1 }
        },
        "required": ["action", "roomId", "checkIn", "checkOut", "adults"]
      }
    },
    {
      "name": "getFactSheet",
      "mcpToolName": "get_fact_sheet",
      "description": "Full GIATA property fact sheet with descriptions, amenities, images, and room classifications. German content only. Separate from hotel details (which returns operational WBE data).",
      "method": "GET",
      "params": { "action": "fact-sheet" },
      "exampleUrl": "https://bergsonne-allgaeu.de/api/booking?action=fact-sheet",
      "inputSchema": {
        "type": "object",
        "properties": {
          "action": { "type": "string", "const": "fact-sheet" }
        },
        "required": ["action"]
      }
    },
    {
      "name": "createBooking",
      "mcpToolName": "create_booking",
      "description": "Create a reservation. Requires POST with JSON body. Mandatory customer fields: firstName, lastName, phone, email, country. Also requires roomId (abbreviation code), rateId, checkIn, checkOut, adults. Add test:true for sandbox mode (returns TEST bookingId, no real reservation). Add idempotencyKey to prevent duplicate bookings on retries.",
      "method": "POST",
      "params": { "action": "bookings" },
      "exampleUrl": "https://bergsonne-allgaeu.de/api/booking?action=bookings",
      "inputSchema": {
        "type": "object",
        "properties": {
          "roomId": { "type": "string", "enum": ["KAPDZ", "KDZ", "KFZ", "SDZ"], "description": "Room type abbreviation code" },
          "rateId": { "type": "string" },
          "checkIn": { "type": "string", "description": "YYYY-MM-DD" },
          "checkOut": { "type": "string", "description": "YYYY-MM-DD" },
          "adults": { "type": "integer", "minimum": 1 },
          "children": { "type": "integer", "minimum": 0, "default": 0 },
          "customer": {
            "type": "object",
            "required": ["firstName", "lastName", "email", "phone", "country"],
            "properties": {
              "firstName": { "type": "string" },
              "lastName": { "type": "string" },
              "email": { "type": "string", "format": "email" },
              "phone": { "type": "string", "description": "e.g. +49 170 1234567" },
              "country": { "type": "string", "description": "ISO code e.g. DE, AT, CH" },
              "salutation": { "type": "string" },
              "address": { "type": "string" },
              "city": { "type": "string" },
              "zip": { "type": "string" },
              "remarks": { "type": "string" }
            }
          },
          "test": { "type": "boolean", "default": false, "description": "Set true for sandbox mode" },
          "idempotencyKey": { "type": "string", "description": "Unique key to prevent duplicate bookings" }
        },
        "required": ["roomId", "rateId", "checkIn", "checkOut", "adults", "customer"]
      },
      "exampleBody": {
        "roomId": "KAPDZ",
        "rateId": "1",
        "checkIn": "2026-03-01",
        "checkOut": "2026-03-03",
        "adults": 2,
        "customer": {
          "firstName": "Max",
          "lastName": "Mustermann",
          "email": "max@example.com",
          "phone": "+49 170 1234567",
          "country": "DE"
        },
        "test": true
      }
    },
    {
      "name": "chatbotApi",
      "description": "REST-only chatbot integration endpoint for third-party AI chatbots (e.g. Dialogflow, Botpress, custom). Supports get_hotel, search_availability, get_price_quote, create_booking via action parameter. Requires Bearer token authentication (CHATBOT_API_TOKEN). This is NOT an MCP tool — use the MCP endpoint for native MCP clients.",
      "method": "GET/POST",
      "baseUrl": "https://bergsonne-allgaeu.de/api/booking-chatbot-api",
      "authentication": "Bearer token (X-Chatbot-Token or Authorization header)",
      "params": {
        "action": "get_hotel | search_availability | get_price_quote | create_booking"
      },
      "exampleUrl": "https://bergsonne-allgaeu.de/api/booking-chatbot-api?action=get_hotel",
      "inputSchema": {
        "type": "object",
        "properties": {
          "action": { "type": "string", "enum": ["get_hotel", "search_availability", "get_price_quote", "create_booking"] },
          "checkIn": { "type": "string", "description": "Arrival date (multiple formats accepted)" },
          "checkOut": { "type": "string", "description": "Departure date" },
          "adults": { "type": "string", "description": "Number of adults" },
          "children": { "type": "string", "description": "Number of children" },
          "roomId": { "type": "string", "enum": ["KAPDZ", "KDZ", "KFZ", "SDZ"] },
          "rateId": { "type": "string" },
          "customer": { "type": "object", "description": "Customer details (POST body for create_booking)" }
        },
        "required": ["action"]
      }
    }
  ]
}
