{
  "openapi": "3.0.1",
  "info": {
    "title": "Flight Price Comparison — 4 sources in one run",
    "description": "Compare flight prices from Google Flights and KAYAK in one run: same route and date on both sources, one dataset, plus a verdict row saying which source is cheaper and by how much. Batch routes, any cabin, one-way and round trip.",
    "version": "0.1",
    "x-build-id": "kY2RWWIe4iXllIkVw"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/lergassy~flight-price-comparison/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-lergassy-flight-price-comparison",
        "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/lergassy~flight-price-comparison/runs": {
      "post": {
        "operationId": "runs-sync-lergassy-flight-price-comparison",
        "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/lergassy~flight-price-comparison/run-sync": {
      "post": {
        "operationId": "run-sync-lergassy-flight-price-comparison",
        "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": {
          "origin": {
            "title": "🛫 Origin airport (IATA)",
            "type": "string",
            "description": "Required unless you fill `routes`. Departure airport code, e.g. <code>DPS</code> (Bali), <code>JFK</code> (New York), <code>LHR</code> (London)"
          },
          "destination": {
            "title": "🛬 Destination airport (IATA)",
            "type": "string",
            "description": "Arrival airport code, e.g. <code>SIN</code> (Singapore), <code>BKK</code> (Bangkok)"
          },
          "departureDate": {
            "title": "📅 Departure date",
            "type": "string",
            "description": "Format <code>YYYY-MM-DD</code>. Leave the route empty and the Actor runs a demo comparison, so a first run always returns rows."
          },
          "returnDate": {
            "title": "📅 Return date (round trip)",
            "type": "string",
            "description": "Format <code>YYYY-MM-DD</code>. Empty for one-way. Round-trip prices are the total for both directions."
          },
          "sources": {
            "title": "🔀 Sources to compare",
            "uniqueItems": true,
            "type": "array",
            "description": "Which sources to query. Google Flights and KAYAK by default. Momondo has a different partner mix, and Ryanair sells direct only — its fares are thin or missing in every metasearch, so on European routes it often undercuts them all.",
            "items": {
              "type": "string",
              "enum": [
                "google-flights",
                "kayak",
                "momondo",
                "ryanair"
              ],
              "enumTitles": [
                "Google Flights",
                "KAYAK",
                "Momondo",
                "Ryanair (direct fares)"
              ]
            },
            "default": [
              "google-flights",
              "kayak"
            ]
          },
          "outputMode": {
            "title": "🧩 Output",
            "enum": [
              "bySource",
              "byFlight"
            ],
            "type": "string",
            "description": "<b>One row per source</b> — every itinerary from every source, tagged with where it came from (default). <b>One row per flight</b> — the same flight from Google Flights, KAYAK and Momondo folded into one row (matched by flight number and departure time) with each source's price side by side, the cheapest price, its seller and booking link. Flights one source cannot price (Google lists Saudia's Saudi domestic flights with no fare) get the price from the source that has it.",
            "default": "bySource"
          },
          "adults": {
            "title": "👤 Adults",
            "minimum": 1,
            "maximum": 9,
            "type": "integer",
            "description": "Number of adult passengers",
            "default": 1
          },
          "children": {
            "title": "🧒 Children",
            "minimum": 0,
            "maximum": 8,
            "type": "integer",
            "description": "Passengers aged 2–11",
            "default": 0
          },
          "cabinClass": {
            "title": "💺 Cabin class",
            "enum": [
              "economy",
              "premium",
              "business",
              "first"
            ],
            "type": "string",
            "description": "Fare class to search on both sources",
            "default": "economy"
          },
          "maxResultsPerSource": {
            "title": "💯 Max flights per source",
            "minimum": 1,
            "maximum": 150,
            "type": "integer",
            "description": "Rows collected from each source for each route",
            "default": 30
          },
          "currency": {
            "title": "💱 Currency",
            "type": "string",
            "description": "Three-letter code, e.g. <code>USD</code>, <code>EUR</code>, <code>GBP</code> — both sources are priced in it, so the comparison is apples to apples",
            "default": "USD"
          },
          "includeVerdict": {
            "title": "🏁 Add the verdict row",
            "type": "boolean",
            "description": "Adds one row per route: cheapest price on each source, the gap between them and which source won. Free — verdict rows are not charged.",
            "default": true
          },
          "routes": {
            "title": "🗺️ More routes (batch)",
            "type": "array",
            "description": "Compare many routes in one run. Each item: <code>{\"origin\": \"JFK\", \"destination\": \"LHR\", \"departureDate\": \"2027-03-15\", \"returnDate\": \"2027-03-22\"}</code>"
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}