{
  "openapi": "3.1.0",
  "info": {
    "title": "Best Orlando Discounts API",
    "version": "1.0.0",
    "description": "Orlando vacation deals and trip budget planning. We may earn a commission when you book through links on this site, at no extra cost to you. We only list authorized sellers, and commissions never change which deal we rank first."
  },
  "servers": [
    {
      "url": "https://bestorlandodiscounts.com"
    }
  ],
  "paths": {
    "/api/plan": {
      "get": {
        "operationId": "planTripBudget",
        "summary": "Builds a day-by-day Orlando vacation plan with a cost breakdown (tickets, hotel, car, food, extras) that fits a budget, using current discount deals. Every bookable item includes a book_url.",
        "parameters": [
          {
            "name": "days",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer"
            },
            "description": "Trip length in days. Default 5."
          },
          {
            "name": "adults",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer"
            },
            "description": "Default 2."
          },
          {
            "name": "kids",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer"
            },
            "description": "Children 3-9. Default 2."
          },
          {
            "name": "budget",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer"
            },
            "description": "Total budget in USD. Default 3000."
          },
          {
            "name": "park",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "universal",
                "disney",
                "seaworld",
                "legoland"
              ]
            },
            "description": "Main theme park. Default universal."
          },
          {
            "name": "rental_car",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Include a rental car. Default true."
          },
          {
            "name": "eligibility",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Discount statuses the travelers have, such as florida_resident or military. Comma-separated."
          }
        ],
        "responses": {
          "200": {
            "description": "Trip plan with breakdown, itinerary and book_url links."
          }
        }
      }
    },
    "/api/deals": {
      "get": {
        "operationId": "searchDeals",
        "summary": "Searches verified Orlando discount deals: theme park tickets, hotels, rental cars and things to do. Returns prices, savings, seller authorization and a book_url.",
        "parameters": [
          {
            "name": "query",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Keywords."
          },
          {
            "name": "category",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "tickets",
                "hotels",
                "transport",
                "things-to-do"
              ]
            }
          },
          {
            "name": "max_price",
            "in": "query",
            "required": false,
            "schema": {
              "type": "number"
            }
          },
          {
            "name": "eligibility",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Comma-separated statuses the travelers have."
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Matching deals."
          }
        }
      }
    },
    "/api/deals/{id}": {
      "get": {
        "operationId": "getDeal",
        "summary": "One deal by id.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The deal."
          },
          "404": {
            "description": "Unknown id."
          }
        }
      }
    }
  }
}