{
  "openapi": "3.0.1",
  "info": {
    "title": "Google Flights Scraper ✈️ Booking Links, Price Graph & Explore",
    "description": "Scrape live Google Flights fares from a pasted link or the form, with every filter, by city, country or airport. Get booking options with seller links, fare names and bag fees, return flights, the price graph and Google Explore's cheapest destinations. True round-trip totals.",
    "version": "0.1",
    "x-build-id": "JTwrVdM59U6n7MvjJ"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/dz_omar~google-flights-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-dz_omar-google-flights-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/dz_omar~google-flights-scraper/runs": {
      "post": {
        "operationId": "runs-sync-dz_omar-google-flights-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/dz_omar~google-flights-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-dz_omar-google-flights-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",
        "properties": {
          "searchUrls": {
            "title": "🔗 Google Flights links",
            "maxItems": 1000,
            "uniqueItems": true,
            "type": "array",
            "description": "One or many Google Flights links — each one runs as its own separate search.\n\n✅ Accepted: https://www.google.com/travel/flights/search?tfs=…  (also google.co.uk, google.fr, and the /travel/flights?tfs=… form)\n🌍 Also: a Google Explore page (https://www.google.com/travel/explore?tfs=…) — one row per destination.\n🔁 Also: a round-trip page with the outbound already chosen — its rows are that outbound's return flights, as on Google.\n❌ Rejected: the Google Flights home page, or any link without a tfs= search in it. Open Google Flights, fill in the search, press Search, then copy the link from the address bar.\n\nFor hundreds of links, switch to the JSON tab and paste the whole array at once. Links run independently of the form below — use either, or both.\n\nA link decides everything about its own search: route, dates, travellers, filters, the tab it was copied from (Best or Cheapest), its sort, and its currency, market and language. The settings below apply to the search you build in Option B, and fill in only what a link does not carry.",
            "items": {
              "type": "string",
              "pattern": "^https://(www\\.)?google\\.[a-z]{2,3}(\\.[a-z]{2})?/travel/(flights(/search)?|explore)\\?[^\\s]*tfs=[^\\s]+$"
            }
          },
          "tripType": {
            "title": "🧭 Trip type",
            "enum": [
              "round_trip",
              "one_way",
              "multi_city",
              "explore"
            ],
            "type": "string",
            "description": "Decides which fields below are used:\n\n🔁 Round trip → Where from + Where to + Departure date + Return date\n➡️ One way → Where from + Where to + Departure date (return date ignored)\n🗺️ Multi-city → the Flights list in the Multi-city section (route and both dates ignored)\n🌍 Explore → Where from, and optionally Where to as a region (\"Europe\"): Google Explore's cheapest destinations, one row each. Dates are flexible (the Explore section) unless you set both dates."
          },
          "origin": {
            "title": "📍 Where from?",
            "maxItems": 10,
            "uniqueItems": true,
            "type": "array",
            "description": "Airport code or place name — one per line:\n\n✈️ JFK — that one airport\n🏙️ Paris — every airport serving the city (CDG, ORY, BVA)\n🌍 United Kingdom — every airport in the country\n\nNames are looked up on Google Flights itself, and the place actually used is written into every result row.\n\n➕ Add up to 10, one per line — they are all searched together in one query. 10 is the most the search itself accepts; an 11th makes Google return nothing at all, so the Actor refuses more than 10.",
            "items": {
              "type": "string",
              "minLength": 2,
              "maxLength": 60
            }
          },
          "destination": {
            "title": "📍 Where to?",
            "maxItems": 10,
            "uniqueItems": true,
            "type": "array",
            "description": "Airport code or place name, one per line — same rules as Where from.\n\n✈️ LAX · 🏙️ Tokyo · 🌍 Algeria\n\nA city searches every airport serving it; a country searches the whole country.\n\n➕ Add up to 10, one per line — they are all searched together in one query. 10 is the most the search itself accepts; an 11th makes Google return nothing at all, so the Actor refuses more than 10.\n\n🌍 Explore: leave empty for anywhere, or give a region, country or city to explore within it (Europe, Japan).",
            "items": {
              "type": "string",
              "minLength": 2,
              "maxLength": 60
            }
          },
          "departureDate": {
            "title": "📅 Departure date",
            "pattern": "^(\\d{4})-(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01])$",
            "type": "string",
            "description": "The day you fly out. Must be today or later.\n\nUsed by 🔁 Round trip and ➡️ One way. 🌍 Explore: optional — set it together with Return date for one exact trip, or leave both empty for flexible dates."
          },
          "returnDate": {
            "title": "📅 Return date · round trip only",
            "pattern": "^(\\d{4})-(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01])$",
            "type": "string",
            "description": "The day you fly back. Must be on or after the departure date.\n\n🔁 ROUND TRIP ONLY — with ➡️ One way this field is ignored and the log says so."
          },
          "outboundDepartureTime": {
            "title": "🛫 Outbound · leaves between",
            "pattern": "^\\s*([01]?\\d|2[0-4])(:00)?\\s*[-–—]\\s*([01]?\\d|2[0-4])(:00)?\\s*$",
            "type": "string",
            "description": "When the first flight may leave. Two whole hours as a range, like Google's Times filter: 6-12 means from 06:00 until 12:00 (a flight at 11:59 is in, 12:00 is out). 0-24 or empty means any time."
          },
          "outboundArrivalTime": {
            "title": "🛬 Outbound · arrives between",
            "pattern": "^\\s*([01]?\\d|2[0-4])(:00)?\\s*[-–—]\\s*([01]?\\d|2[0-4])(:00)?\\s*$",
            "type": "string",
            "description": "When the first flight may land. Two whole hours as a range, like Google's Times filter: 6-12 means from 06:00 until 12:00 (a flight at 11:59 is in, 12:00 is out). 0-24 or empty means any time."
          },
          "returnDepartureTime": {
            "title": "🛫 Return · leaves between · round trip only",
            "pattern": "^\\s*([01]?\\d|2[0-4])(:00)?\\s*[-–—]\\s*([01]?\\d|2[0-4])(:00)?\\s*$",
            "type": "string",
            "description": "When the flight home may leave. Two whole hours as a range, like Google's Times filter: 6-12 means from 06:00 until 12:00 (a flight at 11:59 is in, 12:00 is out). 0-24 or empty means any time."
          },
          "returnArrivalTime": {
            "title": "🛬 Return · arrives between · round trip only",
            "pattern": "^\\s*([01]?\\d|2[0-4])(:00)?\\s*[-–—]\\s*([01]?\\d|2[0-4])(:00)?\\s*$",
            "type": "string",
            "description": "When the flight home may land. Two whole hours as a range, like Google's Times filter: 6-12 means from 06:00 until 12:00 (a flight at 11:59 is in, 12:00 is out). 0-24 or empty means any time."
          },
          "multiCityFlights": {
            "title": "✈️ Flights · multi-city only",
            "minItems": 2,
            "maxItems": 5,
            "type": "array",
            "description": "One entry per flight, in the order you take them. From and To accept airport codes, cities or countries — the same as the route fields above.",
            "items": {
              "type": "object",
              "properties": {
                "origin": {
                  "title": "📍 From",
                  "type": "array",
                  "description": "Where this flight leaves from.\n\nAirport code or place name — one per line, exactly like the route fields above:\n\n✈️ CDG — that one airport\n🏙️ London — every airport serving the city\n🌍 United Kingdom — every airport in the country\n\n➕ Up to 10 per flight, all searched together.",
                  "editor": "stringList",
                  "placeholderValue": "London",
                  "items": {
                    "type": "string",
                    "minLength": 2,
                    "maxLength": 60
                  },
                  "maxItems": 10,
                  "uniqueItems": true
                },
                "destination": {
                  "title": "📍 To",
                  "type": "array",
                  "description": "Where this flight arrives.\n\nAirport code or place name — one per line, exactly like the route fields above:\n\n✈️ CDG — that one airport\n🏙️ London — every airport serving the city\n🌍 United Kingdom — every airport in the country\n\n➕ Up to 10 per flight, all searched together.",
                  "editor": "stringList",
                  "placeholderValue": "Paris",
                  "items": {
                    "type": "string",
                    "minLength": 2,
                    "maxLength": 60
                  },
                  "maxItems": 10,
                  "uniqueItems": true
                },
                "date": {
                  "title": "📅 Date",
                  "type": "string",
                  "description": "Today or later, and on or after the previous flight's date.",
                  "editor": "datepicker",
                  "pattern": "^(\\d{4})-(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01])$"
                },
                "departureTime": {
                  "title": "🛫 Leaves between · optional",
                  "type": "string",
                  "description": "When this flight may leave. Two whole hours as a range, like Google's Times filter: 6-12 means from 06:00 until 12:00 (a flight at 11:59 is in, 12:00 is out). 0-24 or empty means any time.",
                  "editor": "textfield",
                  "pattern": "^\\s*([01]?\\d|2[0-4])(:00)?\\s*[-–—]\\s*([01]?\\d|2[0-4])(:00)?\\s*$"
                },
                "arrivalTime": {
                  "title": "🛬 Arrives between · optional",
                  "type": "string",
                  "description": "When this flight may land. Two whole hours as a range, like Google's Times filter: 6-12 means from 06:00 until 12:00 (a flight at 11:59 is in, 12:00 is out). 0-24 or empty means any time.",
                  "editor": "textfield",
                  "pattern": "^\\s*([01]?\\d|2[0-4])(:00)?\\s*[-–—]\\s*([01]?\\d|2[0-4])(:00)?\\s*$"
                }
              },
              "required": [
                "origin",
                "destination",
                "date"
              ],
              "additionalProperties": false
            }
          },
          "exploreTripLength": {
            "title": "🌍 Explore · trip length",
            "enum": [
              "weekend",
              "one_week",
              "two_weeks"
            ],
            "type": "string",
            "description": "How long the trips Google suggests are, as in Explore's date menu: a weekend is 1–4 days, a week 6–9 days, two weeks 13–16 days. Each destination comes with the dates Google found cheapest.",
            "default": "one_week"
          },
          "exploreMonth": {
            "title": "🌍 Explore · when",
            "enum": [
              "next_6_months",
              "january",
              "february",
              "march",
              "april",
              "may",
              "june",
              "july",
              "august",
              "september",
              "october",
              "november",
              "december"
            ],
            "type": "string",
            "description": "When to travel, as in Explore's date menu: the next six months, or one month.",
            "default": "next_6_months"
          },
          "adults": {
            "title": "🧑 Adults",
            "minimum": 1,
            "maximum": 9,
            "type": "integer",
            "description": "Aged 12 and over. At least 1 — children and infants cannot travel alone.",
            "default": 1
          },
          "children": {
            "title": "🧒 Children",
            "minimum": 0,
            "maximum": 8,
            "type": "integer",
            "description": "Aged 2 to 11, in their own seat.",
            "default": 0
          },
          "infantsInSeat": {
            "title": "👶 Infants in seat",
            "minimum": 0,
            "maximum": 8,
            "type": "integer",
            "description": "Under 2, with a seat of their own (a paid fare).",
            "default": 0
          },
          "infantsOnLap": {
            "title": "🍼 Infants on lap",
            "minimum": 0,
            "maximum": 8,
            "type": "integer",
            "description": "Under 2, travelling on an adult's lap. Cheaper, and limited by the number of adults.",
            "default": 0
          },
          "cabinClass": {
            "title": "💺 Cabin class",
            "enum": [
              "economy",
              "premium_economy",
              "business",
              "first"
            ],
            "type": "string",
            "description": "The cabin to price. Not every route sells every cabin — when one has no fares the run says so plainly instead of returning nothing.",
            "default": "economy"
          },
          "maxStops": {
            "title": "🛑 Stops",
            "enum": [
              "any",
              "nonstop",
              "1-stop",
              "2-stops"
            ],
            "type": "string",
            "description": "Asked of Google directly, so it changes which fares are offered — not just which ones you see.",
            "default": "any"
          },
          "alliances": {
            "title": "🤝 Airlines · alliances",
            "uniqueItems": true,
            "type": "array",
            "description": "Google's Airlines menu, alliance boxes: only flights sold by a member of these alliances. Combine with the next box to add single airlines, as Google's menu allows. Leave empty for all airlines.",
            "items": {
              "type": "string",
              "enum": [
                "ONEWORLD",
                "SKYTEAM",
                "STAR_ALLIANCE"
              ],
              "enumTitles": [
                "Oneworld",
                "SkyTeam",
                "Star Alliance"
              ]
            }
          },
          "airlinesOnly": {
            "title": "✈️ Airlines · only these",
            "maxItems": 50,
            "uniqueItems": true,
            "type": "array",
            "description": "Google's Airlines menu with only some airlines ticked: only flights sold by one of these airlines. Combines with the alliance boxes above.\n\nOne airline per line, written the way Google Flights lists it in its Airlines menu:\n✈️ Air France\n✈️ British Airways\n✈️ Turkish Airlines\n\nTwo-character codes work too (AF, BA, TK). Airlines differ by route: the run matches each name against the airlines Google lists for your route and tells you, in the log and on every row, about any name that isn't there or matches several. Google filters on who SELLS a flight, so allowing British Airways also returns American flights BA sells. Use the 'only' boxes or the 'not' box, not both — like Google's menu.",
            "items": {
              "type": "string",
              "minLength": 2,
              "maxLength": 60
            }
          },
          "airlinesExclude": {
            "title": "🚫 Airlines · not these",
            "maxItems": 50,
            "uniqueItems": true,
            "type": "array",
            "description": "Google's Airlines menu with some airlines unticked: every airline except these. Excluding an airline only removes flights no other airline sells.\n\nOne airline per line, written the way Google Flights lists it in its Airlines menu:\n✈️ Air France\n✈️ British Airways\n✈️ Turkish Airlines\n\nTwo-character codes work too (AF, BA, TK). Airlines differ by route: the run matches each name against the airlines Google lists for your route and tells you, in the log and on every row, about any name that isn't there or matches several. Google filters on who SELLS a flight, so allowing British Airways also returns American flights BA sells. Use the 'only' boxes or the 'not' box, not both — like Google's menu.",
            "items": {
              "type": "string",
              "minLength": 2,
              "maxLength": 60
            }
          },
          "carryOnBags": {
            "title": "🧳 Bags · carry-on, whole party",
            "minimum": 0,
            "maximum": 9,
            "type": "integer",
            "description": "Google's Bags filter: total carry-on bags for the whole party, at most one per traveller with a seat (lap infants don't count). Google then adds those bag fees into each price — it prices the bags in rather than hiding flights, and only where it knows the airline's fee.",
            "default": 0
          },
          "maxPrice": {
            "title": "💰 Price · maximum",
            "minimum": 1,
            "type": "integer",
            "description": "Only return itineraries at or below this total price, in the currency set below."
          },
          "lessEmissionsOnly": {
            "title": "🌱 Emissions · less emissions only",
            "type": "boolean",
            "description": "Only flights whose CO2 is below the typical figure for the route — Google's own \"Less emissions only\" filter, applied to every flight of the trip.",
            "default": false
          },
          "minLayoverHours": {
            "title": "⏳ Connecting airports · shortest layover (hours)",
            "minimum": 0.5,
            "maximum": 48,
            "type": "number",
            "description": "Google's Layover duration filter, lower end: the shortest connection you accept — useful to avoid tight transfers. In hours, in half-hour steps like Google's slider: 1.5 means 1 h 30 min. Applied to every flight. Nonstop flights have no layover and are always kept. Leave empty for no limit."
          },
          "maxLayoverHours": {
            "title": "⏳ Connecting airports · longest layover (hours)",
            "minimum": 0.5,
            "maximum": 48,
            "type": "number",
            "description": "Google's Layover duration filter, upper end: the longest wait between flights you accept. In hours, in half-hour steps like Google's slider: 1.5 means 1 h 30 min. Applied to every flight. Nonstop flights have no layover and are always kept. Leave empty for no limit."
          },
          "connectOnlyVia": {
            "title": "🔀 Connecting airports · only via",
            "maxItems": 50,
            "uniqueItems": true,
            "type": "array",
            "description": "Google's Connecting airports menu with only some airports ticked: connecting flights must change planes at one of these airports.\n\nOne airport code per line — the three letters Google Flights shows in brackets in its Connecting airports menu, e.g. Amsterdam (AMS):\n🛬 DUB — Dublin\n🛬 AMS — Amsterdam\n🛬 IST — Istanbul\n\nAirports differ by route: the run checks each code against the airports Google lists for your route and tells you, in the log and on every row, about any that isn't there. Nonstop flights are always kept. Use this box or the other one, not both — like Google's menu.",
            "items": {
              "type": "string",
              "pattern": "^[A-Za-z]{3}$"
            }
          },
          "neverConnectVia": {
            "title": "🚫 Connecting airports · never via",
            "maxItems": 50,
            "uniqueItems": true,
            "type": "array",
            "description": "Google's Connecting airports menu with some airports unticked: every connecting airport is allowed except these.\n\nOne airport code per line — the three letters Google Flights shows in brackets in its Connecting airports menu, e.g. Amsterdam (AMS):\n🛬 DUB — Dublin\n🛬 AMS — Amsterdam\n🛬 IST — Istanbul\n\nAirports differ by route: the run checks each code against the airports Google lists for your route and tells you, in the log and on every row, about any that isn't there. Nonstop flights are always kept. Use this box or the other one, not both — like Google's menu.",
            "items": {
              "type": "string",
              "pattern": "^[A-Za-z]{3}$"
            }
          },
          "maxDurationHours": {
            "title": "⏱️ Duration · maximum (hours)",
            "minimum": 1,
            "maximum": 72,
            "type": "integer",
            "description": "Google's Duration filter: the longest total journey you accept for each flight, layovers included, in whole hours. Empty means no limit.\n\nThe useful range depends on the route, exactly like Google's slider, which runs from the route's shortest flight to its longest: New York → Boston can take 2, Chicago → London needs at least 8, and New York → Sydney has trips up to 55. A limit below the shortest flight returns a row saying no fares match; one above the longest changes nothing."
          },
          "excludeBasicEconomy": {
            "title": "🎫 Fares · exclude basic economy",
            "type": "boolean",
            "description": "Price every flight at its cheapest fare that is NOT basic economy — no Delta Main Basic, United Basic Economy, Alaska Saver. Flights stay in the list; their price becomes the next fare up (measured on New York → Los Angeles: Delta $239 → $304, Alaska $204 → $259).\n\nGoogle Flights supports this in its search but doesn't show it in its filter bar; it matters mostly on US airlines, whose basic fares leave out seat choice and often carry-on bags.",
            "default": false
          },
          "resultsView": {
            "title": "🏷️ Best or Cheapest",
            "enum": [
              "best",
              "cheapest"
            ],
            "type": "string",
            "description": "The same two tabs Google Flights shows above its results — two different lists.\n\n⭐ Best — Google’s recommended list, fetched directly in about 1–2 seconds per search.\n\n💲 Cheapest — Google’s full Cheapest list, including separate-ticket and mixed-airline combinations the Best list leaves out: about 200 flights where Best has about 120 on the routes tested, with only a few in common. Loaded in a real browser through Apify’s residential proxy (Google hands the full list only to home-type connections), about 10–40 seconds per search.\n\nPasted links keep the tab they were copied from instead.",
            "default": "best"
          },
          "sortBy": {
            "title": "↕️ Sort by",
            "enum": [
              "top_flights",
              "price",
              "departure_time",
              "arrival_time",
              "duration",
              "emissions"
            ],
            "type": "string",
            "description": "The order Google returns the flights in — the same options as its “Sorted by” menu. Sorting is done by Google, so combined with Maximum results it picks the top flights by that measure, e.g. the 10 cheapest or the 10 shortest. A pasted link keeps the sort it was copied with.",
            "default": "top_flights"
          },
          "maxResults": {
            "title": "📊 Maximum results per search",
            "minimum": 1,
            "maximum": 500,
            "type": "integer",
            "description": "Cap on flights stored for EACH search — each pasted link counts as one search, and the form as one more. Google itself stops at 300 per list: Best usually has 50–300 flights, Cheapest 80–300.",
            "default": 200
          },
          "bookingOptionsTop": {
            "title": "🛒 Booking options · for the first N flights",
            "minimum": 0,
            "maximum": 50,
            "type": "integer",
            "description": "Google's \"Booking options\" for each of the first N flights: every airline fare tier and travel agency selling it — measured on New York → Los Angeles: Alaska Saver $204, Alaska Main $259, Gotogate $204, OneTravel $204… — with the fare name, whether it is basic economy, the price, and the link Google sends buyers through (it opens the seller's site with the fare filled in).\n\nA round-trip outbound is booked with Google's cheapest return for it; the row says which. Multi-city trips need every flight chosen: paste Google's page for the last flight.\n\nAbout 1–5 seconds per flight. 0 = off.",
            "default": 0
          },
          "returnFlightsTop": {
            "title": "🔁 Return flights · for the first N outbounds · round trip only",
            "minimum": 0,
            "maximum": 50,
            "type": "integer",
            "description": "Google's return flights for each of the first N outbound flights — the list Google shows after you pick an outbound. Each return is priced as the whole round trip, the way Google prices it.\n\n🔁 ROUND TRIP ONLY. About 1–2 seconds per outbound. 0 = off.",
            "default": 0
          },
          "returnFlightsPerOutbound": {
            "title": "🔁 Return flights · keep per outbound",
            "minimum": 1,
            "maximum": 100,
            "type": "integer",
            "description": "How many of Google's return flights to keep for each outbound, in Google's order. Used only when the field above is above 0.",
            "default": 10
          },
          "priceGraphDays": {
            "title": "📈 Price graph · days",
            "minimum": 0,
            "maximum": 330,
            "type": "integer",
            "description": "Google's \"Price graph\": the lowest fare for each departure date, starting at your departure date, one row per day. A round trip keeps its trip length, so each day comes with its return date. Same route, travellers, cabin and filters as the search.\n\n🔁 Round trip and ➡️ One way. 60 days is two months; up to 330. 0 = off.",
            "default": 0
          },
          "currency": {
            "title": "💱 Currency",
            "enum": [
              "USD",
              "EUR",
              "GBP",
              "JPY",
              "CHF",
              "AFN",
              "ALL",
              "DZD",
              "AOA",
              "ARS",
              "AMD",
              "AWG",
              "AUD",
              "AZN",
              "BSD",
              "BHD",
              "BDT",
              "BBD",
              "BYN",
              "BZD",
              "BMD",
              "BTN",
              "BOB",
              "BAM",
              "BWP",
              "BRL",
              "BND",
              "BGN",
              "BIF",
              "XPF",
              "KHR",
              "CAD",
              "CVE",
              "KYD",
              "XAF",
              "CLP",
              "CNY",
              "COP",
              "KMF",
              "CDF",
              "CRC",
              "CUP",
              "CZK",
              "DKK",
              "DJF",
              "DOP",
              "XCD",
              "EGP",
              "ETB",
              "FJD",
              "GMD",
              "GEL",
              "GHS",
              "GIP",
              "GTQ",
              "GNF",
              "GYD",
              "HTG",
              "HNL",
              "HKD",
              "HUF",
              "ISK",
              "INR",
              "IDR",
              "IRR",
              "IQD",
              "ILS",
              "JMD",
              "JOD",
              "KZT",
              "KES",
              "KWD",
              "KGS",
              "LAK",
              "LBP",
              "LSL",
              "LRD",
              "LYD",
              "MOP",
              "MKD",
              "MGA",
              "MWK",
              "MYR",
              "MVR",
              "MRU",
              "MUR",
              "MXN",
              "MDL",
              "MAD",
              "MZN",
              "MMK",
              "NAD",
              "NPR",
              "ANG",
              "TWD",
              "NZD",
              "NIO",
              "NGN",
              "NOK",
              "OMR",
              "PKR",
              "PAB",
              "PGK",
              "PYG",
              "PEN",
              "PHP",
              "PLN",
              "QAR",
              "RON",
              "RUB",
              "RWF",
              "SVC",
              "SAR",
              "RSD",
              "SCR",
              "SGD",
              "SBD",
              "SOS",
              "ZAR",
              "KRW",
              "LKR",
              "SDG",
              "SRD",
              "SZL",
              "SEK",
              "TJS",
              "TZS",
              "THB",
              "TOP",
              "TTD",
              "TND",
              "TRY",
              "TMT",
              "UGX",
              "UAH",
              "AED",
              "UYU",
              "UZS",
              "VES",
              "VND",
              "XOF",
              "YER",
              "ZMW"
            ],
            "type": "string",
            "description": "Currency for every price. 143 currencies, each one checked against Google Flights: that is Google's own list plus 72 more it prices but leaves out of its menu.\n\nWhy a fixed list: an unrecognised currency is not rejected by Google — it quietly prices in the market's currency instead, while the rows would still carry the code you typed. Only verified codes are offered, so a price is always labelled with the currency it is really in. A link that carries its own currency keeps it.",
            "default": "USD"
          },
          "market": {
            "title": "🌍 Market (country)",
            "enum": [
              "AF",
              "AL",
              "DZ",
              "AS",
              "AD",
              "AO",
              "AG",
              "AR",
              "AM",
              "AU",
              "AT",
              "AZ",
              "BS",
              "BH",
              "BD",
              "BY",
              "BE",
              "BZ",
              "BJ",
              "BT",
              "BO",
              "BA",
              "BW",
              "BR",
              "BN",
              "BG",
              "BF",
              "BI",
              "KH",
              "CM",
              "CA",
              "CV",
              "CF",
              "TD",
              "CL",
              "CN",
              "CO",
              "CG",
              "CD",
              "CK",
              "CR",
              "CI",
              "HR",
              "CU",
              "CY",
              "CZ",
              "DK",
              "DJ",
              "DM",
              "DO",
              "EC",
              "EG",
              "SV",
              "EE",
              "ET",
              "FJ",
              "FI",
              "FR",
              "GA",
              "GM",
              "GE",
              "DE",
              "GH",
              "GI",
              "GR",
              "GL",
              "GT",
              "GG",
              "GY",
              "HT",
              "HN",
              "HK",
              "HU",
              "IS",
              "IN",
              "ID",
              "IR",
              "IQ",
              "IE",
              "IM",
              "IL",
              "IT",
              "JM",
              "JP",
              "JE",
              "JO",
              "KZ",
              "KE",
              "KI",
              "KW",
              "KG",
              "LA",
              "LV",
              "LB",
              "LS",
              "LY",
              "LI",
              "LT",
              "LU",
              "MG",
              "MW",
              "MY",
              "MV",
              "ML",
              "MT",
              "MU",
              "MX",
              "FM",
              "MD",
              "MN",
              "ME",
              "MA",
              "MZ",
              "MM",
              "NA",
              "NR",
              "NP",
              "NL",
              "NZ",
              "NI",
              "NE",
              "NG",
              "NU",
              "MK",
              "NO",
              "OM",
              "PK",
              "PS",
              "PA",
              "PG",
              "PY",
              "PE",
              "PH",
              "PN",
              "PL",
              "PT",
              "PR",
              "QA",
              "RO",
              "RU",
              "RW",
              "WS",
              "SM",
              "ST",
              "SA",
              "SN",
              "RS",
              "SC",
              "SL",
              "SG",
              "SK",
              "SI",
              "SB",
              "SO",
              "ZA",
              "KR",
              "ES",
              "LK",
              "SH",
              "VC",
              "SR",
              "SE",
              "CH",
              "TW",
              "TJ",
              "TZ",
              "TH",
              "TL",
              "TG",
              "TO",
              "TT",
              "TN",
              "TR",
              "TM",
              "UG",
              "UA",
              "AE",
              "GB",
              "US",
              "UY",
              "UZ",
              "VU",
              "VE",
              "VN",
              "ZM",
              "ZW"
            ],
            "type": "string",
            "description": "The point of sale — which country's Google Flights you are searching. Fares and availability genuinely differ by market. All 186 countries Google Flights offers.",
            "default": "US"
          },
          "language": {
            "title": "🗣️ Language",
            "enum": [
              "af",
              "sq",
              "am",
              "ar",
              "as",
              "bn",
              "eu",
              "bs",
              "bg",
              "ca",
              "zh-HK",
              "zh-CN",
              "zh-TW",
              "hr",
              "cs",
              "da",
              "nl",
              "en-GB",
              "en-US",
              "et",
              "fil",
              "fi",
              "fr",
              "gl",
              "ka",
              "de",
              "el",
              "gu",
              "iw",
              "hi",
              "hu",
              "is",
              "id",
              "it",
              "ja",
              "kn",
              "km",
              "ko",
              "lo",
              "lv",
              "lt",
              "mk",
              "ms",
              "ml",
              "mr",
              "mn",
              "ne",
              "no",
              "or",
              "fa",
              "pl",
              "pt-BR",
              "pt-PT",
              "pa",
              "ro",
              "ru",
              "sr",
              "sr-Latn",
              "si",
              "sk",
              "sl",
              "es-419",
              "es",
              "sw",
              "sv",
              "ta",
              "te",
              "th",
              "tr",
              "uk",
              "ur",
              "vi"
            ],
            "type": "string",
            "description": "Language for airline, airport and city names in the results. All 72 languages Google Flights offers. English comes as en-US or en-GB — Google has no plain \"en\".",
            "default": "en-US"
          }
        }
      },
      "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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}