{
  "openapi": "3.1.0",
  "info": {
    "title": "Kyushu Travel Discount Calculator API",
    "version": "1.0.0",
    "description": "Kyushu Fukko Ouenwari (九州ふっこう応援割) 2026: 50% off Kyushu stays (60% in Kumamoto and Kagoshima), capped at ¥20,000–¥35,000 per person. See your discount, what you pay, whether your dates and booking channel qualify, and when sales open.\n\nFree, no API key, CORS open. Fair use: about 120 requests per minute per IP. Also available as MCP tools at https://free-agent-tools.vercel.app/mcp"
  },
  "servers": [
    {
      "url": "https://kyushu-travel-discount.vercel.app"
    }
  ],
  "paths": {
    "/api/discount": {
      "get": {
        "operationId": "kyushuTravelDiscount",
        "summary": "Kyushu Fukko Ouenwari 2026 (九州ふっこう応援割): discount, price to pay, and date/channel eligibility",
        "description": "Japan's Kyushu recovery travel discount after the 2026 Kumamoto earthquake: 50% off eligible Kyushu stays and stay+transport packages (60% in Kumamoto and Kagoshima), capped per person per trip at ¥20,000 (accommodation only, or 1-night package), ¥30,000 (package of 2+ nights) or ¥35,000 (tour with stays in 2+ Kyushu prefectures). Each prefecture and channel (booking site, travel agency, direct with the hotel) has its own sales start and eligible nights: Fukuoka nights to 2026-12-15; Saga, Nagasaki, Kumamoto, Oita, Miyazaki to 12-25; Kagoshima from 2026-10-14 to 2027-01-31 (direct to 2027-02-28) except nights 12-26 to 01-03. Bookings made before sales start are never discounted. Returns the discount, price to pay, cap, effective %, the per-person price up to which the full rate applies, ¥100 round-down variant, an eligibility verdict (eligible / not_eligible / not_yet_open / sold_out / unchecked) with reasons and the next sales opening, prefecture notes, call center, official links, rulesAsOf, and a disclaimer.\n\nExample: https://kyushu-travel-discount.vercel.app/api/discount?prefecture=kumamoto&product=lodging&nights=2&totalPriceJPY=60000&travelers=2&channel=ota&checkIn=2026-11-20&bookingDate=2026-10-13",
        "parameters": [
          {
            "name": "prefecture",
            "in": "query",
            "required": true,
            "description": "Kyushu prefecture whose campaign the booking is under (where you stay; for a multi-prefecture tour, the selling prefecture). Japanese names like 熊本県 also accepted.",
            "schema": {
              "type": "string",
              "description": "Kyushu prefecture whose campaign the booking is under (where you stay; for a multi-prefecture tour, the selling prefecture). Japanese names like 熊本県 also accepted.",
              "enum": [
                "fukuoka",
                "saga",
                "nagasaki",
                "kumamoto",
                "oita",
                "miyazaki",
                "kagoshima"
              ]
            }
          },
          {
            "name": "totalPriceJPY",
            "in": "query",
            "required": true,
            "description": "Booking total in yen for all travelers before the discount (tax and service included).",
            "schema": {
              "type": "number",
              "description": "Booking total in yen for all travelers before the discount (tax and service included).",
              "minimum": 1
            }
          },
          {
            "name": "travelers",
            "in": "query",
            "required": false,
            "description": "People on the booking. Children and infants count.",
            "schema": {
              "type": "integer",
              "description": "People on the booking. Children and infants count.",
              "default": 1,
              "minimum": 1,
              "maximum": 100
            }
          },
          {
            "name": "nights",
            "in": "query",
            "required": false,
            "description": "Nights booked. 0 = day trip (not eligible).",
            "schema": {
              "type": "integer",
              "description": "Nights booked. 0 = day trip (not eligible).",
              "default": 1,
              "minimum": 0,
              "maximum": 60
            }
          },
          {
            "name": "product",
            "in": "query",
            "required": false,
            "description": "lodging (宿泊単体, accommodation only), package (交通付宿泊, stay + flight/train), tour (周遊型, stays in 2+ Kyushu prefectures).",
            "schema": {
              "type": "string",
              "description": "lodging (宿泊単体, accommodation only), package (交通付宿泊, stay + flight/train), tour (周遊型, stays in 2+ Kyushu prefectures).",
              "enum": [
                "lodging",
                "package",
                "tour"
              ],
              "default": "lodging"
            }
          },
          {
            "name": "channel",
            "in": "query",
            "required": false,
            "description": "ota (booking site like Rakuten Travel / Jalan), agency (travel agency), direct (booking directly with the hotel).",
            "schema": {
              "type": "string",
              "description": "ota (booking site like Rakuten Travel / Jalan), agency (travel agency), direct (booking directly with the hotel).",
              "enum": [
                "ota",
                "agency",
                "direct"
              ],
              "default": "ota"
            }
          },
          {
            "name": "checkIn",
            "in": "query",
            "required": false,
            "description": "YYYY-MM-DD check-in date. Needed for the date eligibility check.",
            "schema": {
              "type": "string",
              "description": "YYYY-MM-DD check-in date. Needed for the date eligibility check."
            }
          },
          {
            "name": "bookingDate",
            "in": "query",
            "required": false,
            "description": "YYYY-MM-DD date you book (JST). Default: today in Japan.",
            "schema": {
              "type": "string",
              "description": "YYYY-MM-DD date you book (JST). Default: today in Japan."
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Result as JSON. Always includes a `disclaimer` field.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid input. The body explains what to send and gives an example."
          },
          "429": {
            "description": "Too many requests from one IP. Retry after the Retry-After seconds."
          }
        }
      },
      "post": {
        "operationId": "kyushuTravelDiscountPost",
        "summary": "Kyushu Fukko Ouenwari 2026 (九州ふっこう応援割): discount, price to pay, and date/channel eligibility (JSON body)",
        "description": "Japan's Kyushu recovery travel discount after the 2026 Kumamoto earthquake: 50% off eligible Kyushu stays and stay+transport packages (60% in Kumamoto and Kagoshima), capped per person per trip at ¥20,000 (accommodation only, or 1-night package), ¥30,000 (package of 2+ nights) or ¥35,000 (tour with stays in 2+ Kyushu prefectures). Each prefecture and channel (booking site, travel agency, direct with the hotel) has its own sales start and eligible nights: Fukuoka nights to 2026-12-15; Saga, Nagasaki, Kumamoto, Oita, Miyazaki to 12-25; Kagoshima from 2026-10-14 to 2027-01-31 (direct to 2027-02-28) except nights 12-26 to 01-03. Bookings made before sales start are never discounted. Returns the discount, price to pay, cap, effective %, the per-person price up to which the full rate applies, ¥100 round-down variant, an eligibility verdict (eligible / not_eligible / not_yet_open / sold_out / unchecked) with reasons and the next sales opening, prefecture notes, call center, official links, rulesAsOf, and a disclaimer.",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "prefecture",
                  "totalPriceJPY"
                ],
                "properties": {
                  "prefecture": {
                    "type": "string",
                    "description": "Kyushu prefecture whose campaign the booking is under (where you stay; for a multi-prefecture tour, the selling prefecture). Japanese names like 熊本県 also accepted.",
                    "enum": [
                      "fukuoka",
                      "saga",
                      "nagasaki",
                      "kumamoto",
                      "oita",
                      "miyazaki",
                      "kagoshima"
                    ]
                  },
                  "totalPriceJPY": {
                    "type": "number",
                    "description": "Booking total in yen for all travelers before the discount (tax and service included).",
                    "minimum": 1
                  },
                  "travelers": {
                    "type": "integer",
                    "description": "People on the booking. Children and infants count.",
                    "default": 1,
                    "minimum": 1,
                    "maximum": 100
                  },
                  "nights": {
                    "type": "integer",
                    "description": "Nights booked. 0 = day trip (not eligible).",
                    "default": 1,
                    "minimum": 0,
                    "maximum": 60
                  },
                  "product": {
                    "type": "string",
                    "description": "lodging (宿泊単体, accommodation only), package (交通付宿泊, stay + flight/train), tour (周遊型, stays in 2+ Kyushu prefectures).",
                    "enum": [
                      "lodging",
                      "package",
                      "tour"
                    ],
                    "default": "lodging"
                  },
                  "channel": {
                    "type": "string",
                    "description": "ota (booking site like Rakuten Travel / Jalan), agency (travel agency), direct (booking directly with the hotel).",
                    "enum": [
                      "ota",
                      "agency",
                      "direct"
                    ],
                    "default": "ota"
                  },
                  "checkIn": {
                    "type": "string",
                    "description": "YYYY-MM-DD check-in date. Needed for the date eligibility check."
                  },
                  "bookingDate": {
                    "type": "string",
                    "description": "YYYY-MM-DD date you book (JST). Default: today in Japan."
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Result as JSON. Always includes a `disclaimer` field.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid input. The body explains what to send and gives an example."
          },
          "429": {
            "description": "Too many requests from one IP. Retry after the Retry-After seconds."
          }
        }
      }
    },
    "/api/rules": {
      "get": {
        "operationId": "kyushuTravelDiscountRules",
        "summary": "Full Kyushu Fukko Ouenwari 2026 rules: rates, caps, all 7 prefectures by channel (sales start, eligible nights, status), upcoming sales openings",
        "description": "Returns the dated rules per prefecture and channel, common rules, upcoming sales openings from today (JST), sources, and disclaimer. No inputs.",
        "responses": {
          "200": {
            "description": "Rules JSON with rulesAsOf and sources.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          }
        }
      }
    }
  }
}