{
  "openapi": "3.0.1",
  "info": {
    "title": "Flight Price Scraper",
    "description": "This tool finds the lowest flight prices by scanning multiple travel sites at once. No need to open Google Flights, Skyscanner, or Kayak separately—it does all the comparisons for you.",
    "version": "1.8",
    "x-build-id": "vRykhDJ3afz7yJYcA"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/credible_sandal~flight-price-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-credible_sandal-flight-price-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/credible_sandal~flight-price-scraper/runs": {
      "post": {
        "operationId": "runs-sync-credible_sandal-flight-price-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/credible_sandal~flight-price-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-credible_sandal-flight-price-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "required": [
          "from",
          "to",
          "departureDate"
        ],
        "properties": {
          "from": {
            "title": "From (Origin)",
            "minLength": 2,
            "type": "string",
            "description": "Origin airport code (e.g., LAX, JFK) or city name (e.g., Los Angeles, New York)"
          },
          "to": {
            "title": "To (Destination)",
            "minLength": 2,
            "type": "string",
            "description": "Destination airport code (e.g., JFK, LHR) or city name (e.g., New York, London)"
          },
          "departureDate": {
            "title": "Departure Date",
            "type": "string",
            "description": "Date of departure (YYYY-MM-DD format)"
          },
          "returnDate": {
            "title": "Return Date (Optional)",
            "type": "string",
            "description": "Return date for round-trip flights (YYYY-MM-DD format). Leave empty for one-way flights."
          },
          "flexibleDates": {
            "title": "Flexible Dates",
            "type": "boolean",
            "description": "Search nearby dates to find cheaper options",
            "default": false
          },
          "dateFlexibility": {
            "title": "Date Flexibility (±days)",
            "minimum": 1,
            "maximum": 7,
            "type": "integer",
            "description": "Number of days before/after your preferred date to search (1-3 days recommended)",
            "default": 3
          },
          "sources": {
            "title": "Flight Sources to Search",
            "uniqueItems": true,
            "type": "array",
            "description": "Select which flight booking sites to search. Default: Google Flights only. Add Skyscanner/Priceline if you have residential proxy configured.",
            "items": {
              "type": "string",
              "enum": [
                "google_flights",
                "skyscanner",
                "kayak",
                "kiwi",
                "priceline",
                "expedia"
              ],
              "enumTitles": [
                "Google Flights",
                "Skyscanner",
                "Kayak",
                "Kiwi.com - Virtual Interlining",
                "Priceline",
                "Expedia"
              ]
            },
            "default": [
              "google_flights"
            ]
          },
          "passengers": {
            "title": "Number of Passengers",
            "minimum": 1,
            "maximum": 9,
            "type": "integer",
            "description": "Number of passengers (adults)",
            "default": 1
          },
          "cabinClass": {
            "title": "Cabin Class",
            "enum": [
              "economy",
              "premium_economy",
              "business",
              "first"
            ],
            "type": "string",
            "description": "Preferred cabin class",
            "default": "economy"
          },
          "maxStops": {
            "title": "Maximum Number of Stops",
            "minimum": -1,
            "maximum": 2,
            "type": "integer",
            "description": "Maximum number of stops (layovers). -1 = any, 0 = non-stop only, 1 = max 1 stop, 2 = max 2 stops",
            "default": -1
          },
          "maxPrice": {
            "title": "Maximum Price (USD)",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum price per person in USD (optional filter)"
          },
          "hotDealsOnly": {
            "title": "Hot Deals Only",
            "type": "boolean",
            "description": "When enabled, returns only the best-value flights (cheapest, good-value, and top-3 recommended). Ideal for price monitoring and automated pipelines where you only want actionable results.",
            "default": false
          },
          "rankingPreference": {
            "title": "Ranking Preference",
            "enum": [
              "balanced",
              "cheapest",
              "fastest",
              "best_nonstop"
            ],
            "type": "string",
            "description": "How to prioritize flights when ranking results. Balanced gives the best overall value; other presets tune the scoring weights toward price, speed, or non-stop preference.",
            "default": "balanced"
          },
          "proxyConfiguration": {
            "title": "Proxy Configuration",
            "type": "object",
            "description": "Proxy settings for Priceline & Skyscanner (both block datacenter IPs). Select RESIDENTIAL proxy group for these sources to work. Google Flights, Kayak, and Kiwi work without proxy."
          },
          "tripType": {
            "title": "Trip Type",
            "enum": [
              "oneway",
              "roundtrip",
              "multicity"
            ],
            "type": "string",
            "description": "Type of trip to search. Use 'Multi-City' for trips with 2–4 legs in different directions. Each leg is searched independently — legs are NOT protected connections and must be booked separately.",
            "default": "oneway"
          },
          "legs": {
            "title": "Multi-City Legs",
            "type": "array",
            "description": "Required when Trip Type is Multi-City. Add 2–4 legs in chronological order. Each leg needs 'from' (origin), 'to' (destination), and 'date' (YYYY-MM-DD). Example: [{\"from\":\"LAX\",\"to\":\"JFK\",\"date\":\"2026-11-23\"},{\"from\":\"JFK\",\"to\":\"LHR\",\"date\":\"2026-11-28\"}]. WARNING: Multi-city searches take significantly longer (roughly N legs × single search time). If Skyscanner or Priceline are enabled, proxy usage also multiplies by N.",
            "items": {
              "type": "object",
              "properties": {
                "from": {
                  "title": "From (Origin)",
                  "type": "string",
                  "description": "Origin airport code or city (e.g. LAX)"
                },
                "to": {
                  "title": "To (Destination)",
                  "type": "string",
                  "description": "Destination airport code or city (e.g. JFK)"
                },
                "date": {
                  "title": "Date (YYYY-MM-DD)",
                  "type": "string",
                  "description": "Departure date for this leg in YYYY-MM-DD format"
                }
              }
            }
          },
          "checkedBags": {
            "title": "Checked Bags",
            "minimum": 0,
            "maximum": 2,
            "type": "integer",
            "description": "Number of checked bags per person (0, 1, or 2). When set, each flight result includes estimated baggage fees and a true total cost (base fare + bags). Fees are estimates based on standard economy — actual fees vary by fare type, route, and loyalty status."
          },
          "carryOnBag": {
            "title": "Carry-On Bag",
            "type": "boolean",
            "description": "Whether a carry-on bag (overhead bin) is needed. Most full-service carriers include this free; budget carriers (Spirit, Frontier, Ryanair) charge $10–$45. Enable alongside Checked Bags for a full cost estimate.",
            "default": false
          },
          "departureTimeFrom": {
            "title": "Earliest Departure Time",
            "type": "string",
            "description": "Earliest allowed departure time in HH:MM 24-hour format. Flights departing before this time are excluded. Example: '06:00' to avoid red-eyes."
          },
          "departureTimeTo": {
            "title": "Latest Departure Time",
            "type": "string",
            "description": "Latest allowed departure time in HH:MM 24-hour format. Flights departing after this time are excluded. Example: '20:00' to avoid late-night departures."
          },
          "arrivalTimeBefore": {
            "title": "Arrive Before (Time)",
            "type": "string",
            "description": "Latest allowed arrival time at destination in HH:MM 24-hour format. Flights arriving after this time are excluded. Example: '22:00' for a business trip."
          },
          "preferredAirlines": {
            "title": "Preferred Airlines",
            "type": "array",
            "description": "Prioritize flights from these airlines. Results are filtered to your preferred airlines when available — if none are found, all airlines are shown instead with a notice. Accepts IATA codes (e.g. 'AA', 'DL') or full names (e.g. 'American Airlines'). Case-insensitive. Leave empty to allow all airlines.",
            "items": {
              "type": "string"
            }
          },
          "excludedAirlines": {
            "title": "Excluded Airlines (Block-List)",
            "type": "array",
            "description": "Never show flights from these airlines. Accepts IATA codes or full names. Common exclusions: 'NK' (Spirit), 'F9' (Frontier), 'G4' (Allegiant).",
            "items": {
              "type": "string"
            }
          },
          "minLayoverMinutes": {
            "title": "Minimum Layover Duration (minutes)",
            "minimum": 0,
            "type": "integer",
            "description": "Exclude flights where any layover is shorter than this many minutes. Useful to avoid tight connections. Note: only applied to Kiwi.com results (only source with per-layover timing)."
          },
          "maxLayoverMinutes": {
            "title": "Maximum Layover Duration (minutes)",
            "minimum": 0,
            "type": "integer",
            "description": "Exclude flights where any layover is longer than this many minutes. Useful to avoid overnight layovers. Note: only applied to Kiwi.com results."
          },
          "outputCurrency": {
            "title": "Output Currency",
            "type": "string",
            "description": "Currency for all output prices (ISO 4217 code, e.g. 'USD', 'EUR', 'GBP', 'JPY', 'CAD'). Prices are fetched in USD and converted using live exchange rates. The original USD price is preserved in the result. If conversion is unavailable, USD prices are returned. Default: USD.",
            "default": "USD"
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}