Skip to content

// docs

KAYAK: Search flights

Extracts flight results from KAYAK Brazil by origin/destination airport, dates and passengers, returning fares, segments, suppliers and search status in structured JSON.

kayak.com.br:plp · 5 credits per request

Standard credit cost. Your account pricing is shown in the sandbox.

Try this operation in the sandbox

Source-specific limitations

Some requests can take up to 1 minute to respond. This is expected for this operation; wait for the request to complete.

HTTP request

cURL
curl -X POST https://api.geckoapi.com.br/v1/extract \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "target": "kayak.com.br",
  "type": "plp",
  "from": "GRU",
  "to": "GIG",
  "departureDate": "2026-06-20",
  "returnDate": "2026-06-27",
  "numAdults": 1,
  "numChildren": 0,
  "numInfants": 0,
  "lang": "pt-BR",
  "currency": "BRL"
}'

Keep your API key on your server. See the quickstart for authentication and response handling.

MCP request

The hosted MCP tool fixes target and type for this operation. Its remaining arguments use the same input rules as Extract.

POST /v1/mcp · Bearer or X-API-Key authentication

kayak_com_br_plp · tools/call
{
  "jsonrpc": "2.0",
  "id": 3,
  "method": "tools/call",
  "params": {
    "name": "kayak_com_br_plp",
    "arguments": {
      "from": "GRU",
      "to": "GIG",
      "departureDate": "2026-06-20",
      "returnDate": "2026-06-27",
      "numAdults": 1,
      "numChildren": 0,
      "numInfants": 0,
      "lang": "pt-BR",
      "currency": "BRL",
      "executionId": "exec_example_123"
    }
  }
}

Supported inputs

Conditional fields depend on the alternatives and constraints in the rule column. Fields marked unsupported are omitted.

FieldTypeRequirementRuleDefaultExample
url
URL extraction target. For some PLPs it can be omitted when API assembles URL from other fields.
string (URL) Optional Optional. When informed, it must be a public URL from KAYAK Brazil in kayak.com.br with route /flights/ORIGEM-DESTINO/YYYY-MM-DD[/YYYY-MM-DD]. Without URL, send from, to and departureDate. - https://www.kayak.com.br/flights/GRU-GIG/2026-06-20/2026-06-27
from
Code IATA of the airport of origin for searching PLP of Decolar, GOL, Azul, LATAM, Trip.com, KAYAK, MaxMilhas and 123Milhas.
string (IATA 3 letters) Required Code IATA of the airport of origin with letters 3 (ex: GRU). Mandatory when url is not sent. - GRU
to
Destination airport code IATA for search PLP of Decolar, GOL, Azul, LATAM, Trip.com, KAYAK, MaxMilhas and 123Milhas.
string (IATA 3 letters) Required Code IATA of the destination airport with letters 3 (ex: GIG). Mandatory when url is not sent. - GIG
departureDate
Departure date for searching PLP from ClickBus, Decolar, GOL, Azul, LATAM, Trip.com, KAYAK, MaxMilhas and 123Milhas.
string (YYYY-MM-DD) Required Departure date in YYYY-MM-DD format. Mandatory when url is not sent. - 2026-06-20
returnDate
Optional return date for PLP search of ClickBus, Decolar, GOL, Azul, LATAM, Trip.com, KAYAK, MaxMilhas, and 123Milhas.
string (YYYY-MM-DD) Optional Return date in YYYY-MM-DD format. Must be greater than or equal to departureDate. - 2026-06-27
target
Target source for extraction.
enum Required Always mandatory and must be kayak.com.br. - kayak.com.br
type
Extraction type: pdp, idp, plp, ilp, quote, review or places.
enum Required Always mandatory and must be plp. - plp
page
Pagination. In PLP, including Trivago, and in Reclame AQUI ILP starts in 1; in review (MercadoLivre, Booking and Hotels) starts in 0. The Reclame AQUI ILP even accepts the page 100.
integer Optional Number of the results page, starting at 1. 1 1
numAdults
Quantity of adults for Booking, Airbnb, Hoteis.com, Trivago, Decolar, GOL, Azul, LATAM and Trip.com.
integer (1-30) Optional Number of adults. Must be an integer between 1 and 9. 1 1
numChildren
Number of children for Booking, Hoteis.com, Trivago, Decolar, GOL, Azul, LATAM and Trip.com.
integer (0-30) Optional Number of children. Must be an integer between 0 and 9. 0 0
numInfants
Number of babies for GOL, Azul, LATAM and Trip.com PLP. It must be less than or equal to the number of adults.
integer (0-9) Optional Number of babies in arms. Must be an integer between 0 and 9 and less than or equal to numAdults. 0 0
lang
Language for Booking and Trivago (backend default: pt-br).
string (ll or ll-cc) Optional Language accepted by the KAYAK in format ll or ll-CC. The default of GeckoAPI for this endpoint is pt-BR. pt-BR pt-BR
currency
Currency for Booking, Trivago and Azul (backend default: BRL).
string (ISO 4217) Optional Currency with 3 letters. The default of GeckoAPI for this endpoint is BRL. BRL BRL

Request examples

Search KAYAK - round trip

Round-trip search in KAYAK Brazil with defaults pt-BR and BRL.

Search KAYAK - round trip
{
  "target": "kayak.com.br",
  "type": "plp",
  "from": "GRU",
  "to": "GIG",
  "departureDate": "2026-06-20",
  "returnDate": "2026-06-27",
  "numAdults": 1,
  "numChildren": 0,
  "numInfants": 0,
  "lang": "pt-BR",
  "currency": "BRL"
}

Search KAYAK for URL

Search using a public URL for flights from KAYAK Brazil.

Search KAYAK for URL
{
  "target": "kayak.com.br",
  "type": "plp",
  "url": "https://www.kayak.com.br/flights/GRU-GIG/2026-06-20/2026-06-27",
  "lang": "pt-BR",
  "currency": "BRL"
}

Response schema

Leaf paths and expected types. Field names and enum values are part of the API contract.

responseSchema
{
  "requestId": "string (uuid)",
  "executionId": "string (uuid)",
  "data.source": "string",
  "data.type": "string",
  "data.parser": "\"1.0.0\"",
  "data.url": "string",
  "data.requestUrl": "string",
  "data.pollUrl": "string",
  "data.extractedAt": "string (iso datetime)",
  "data.searchType": "string (ONE_WAY | ROUND_TRIP)",
  "data.from": "string",
  "data.to": "string",
  "data.departureDate": "string (YYYY-MM-DD)",
  "data.returnDate": "string | null",
  "data.numAdults": "number",
  "data.numChildren": "number",
  "data.numInfants": "number",
  "data.lang": "string",
  "data.currency": "string",
  "data.searchId": "string | null",
  "data.status": "string | null",
  "data.success": "boolean",
  "data.complete": "boolean",
  "data.totalResults": "number",
  "data.listedResults": "number",
  "data.filteredCount": "number | null",
  "data.page": "number",
  "data.pageSize": "number",
  "data.pollsPerformed": "number",
  "data.cheapestPrice.currency": "string | null",
  "data.cheapestPrice.amount": "number | null",
  "data.cheapestPrice.localizedPrice": "string | null",
  "data.airports[].code": "string",
  "data.airlines[].code": "string",
  "data.airlines[].name": "string | null",
  "data.providers[].code": "string",
  "data.providers[].displayName": "string | null",
  "data.items[].position": "number",
  "data.items[].resultId": "string | null",
  "data.items[].price.amount": "number | null",
  "data.items[].price.localizedPrice": "string | null",
  "data.items[].legs[].origin": "string | null",
  "data.items[].legs[].destination": "string | null",
  "data.items[].legs[].durationMinutes": "number | null",
  "data.items[].legs[].stops": "number | null",
  "data.items[].legs[].segments[].flightNumber": "string | null",
  "data.items[].bookingOptions[].providerName": "string | null",
  "data.items[].bookingOptions[].totalPrice.localizedPrice": "string | null"
}

Example response

Illustrative response. Product names, reviews and other source content retain their original language. Missing and null values do not imply zero stock, free shipping or zero reviews.

responseExample
{
  "requestId": "99999999-1111-4111-8111-999999999999",
  "executionId": "99999999-2222-4222-8222-999999999999",
  "data": {
    "source": "kayak.com.br",
    "type": "plp",
    "parser": "1.0.0",
    "url": "https://www.kayak.com.br/flights/GRU-GIG/2026-06-20/2026-06-27",
    "requestUrl": "https://www.kayak.com.br/flights/GRU-GIG/2026-06-20/2026-06-27",
    "pollUrl": "https://www.kayak.com.br/i/api/search/v2/flights/poll",
    "extractedAt": "2026-05-14T15:00:00.000Z",
    "searchType": "ROUND_TRIP",
    "from": "GRU",
    "to": "GIG",
    "departureDate": "2026-06-20",
    "returnDate": "2026-06-27",
    "numAdults": 1,
    "numChildren": 0,
    "numInfants": 0,
    "lang": "pt-BR",
    "currency": "BRL",
    "searchId": "kayak-search-id",
    "status": "complete",
    "success": true,
    "complete": true,
    "totalResults": 1111,
    "listedResults": 15,
    "filteredCount": 0,
    "page": 1,
    "pageSize": 15,
    "pollsPerformed": 2,
    "cheapestPrice": {
      "currency": "BRL",
      "amount": 372,
      "localizedPrice": "R$ 372"
    },
    "airports": [
      {
        "code": "GRU",
        "cityCode": "SAO",
        "cityName": "Sao Paulo",
        "displayName": "Guarulhos Intl",
        "fullDisplayName": "Sao Paulo Guarulhos Intl"
      }
    ],
    "airlines": [
      {
        "code": "G3",
        "name": "GOL",
        "logoUrl": "https://content.r9cdn.net/rimg/provider-logos/airlines/v/G3.png"
      }
    ],
    "providers": [
      {
        "code": "123milhas",
        "displayName": "123Milhas",
        "logoUrl": "https://content.r9cdn.net/rimg/provider-logos/airlines/v/123milhas.png"
      }
    ],
    "items": [
      {
        "position": 1,
        "resultId": "result-1",
        "tripId": "trip-1",
        "type": "core",
        "viewRank": 1,
        "shareableId": "share-1",
        "shareableUrl": "https://www.kayak.com.br/flights/GRU-GIG/2026-06-20/2026-06-27",
        "isBest": true,
        "isCheapest": true,
        "isCheapestDirect": true,
        "isFeatured": false,
        "hasHackerFares": false,
        "price": {
          "currency": "BRL",
          "amount": 372,
          "localizedPrice": "R$ 372"
        },
        "totalBookingOptions": 3,
        "totalDistinctFares": 1,
        "legs": [
          {
            "id": "leg-1",
            "origin": "GRU",
            "destination": "GIG",
            "departure": "2026-06-20T06:00:00",
            "arrival": "2026-06-20T07:05:00",
            "durationMinutes": 65,
            "stops": 0,
            "airlineCodes": [
              "G3"
            ],
            "segments": [
              {
                "id": "segment-1",
                "origin": "GRU",
                "destination": "GIG",
                "departure": "2026-06-20T06:00:00",
                "arrival": "2026-06-20T07:05:00",
                "durationMinutes": 65,
                "airlineCode": "G3",
                "airlineName": "GOL",
                "flightNumber": "1234",
                "equipmentTypeName": "Boeing 737",
                "cabinCode": "Y",
                "cabinDisplay": "Economy",
                "seatsRemaining": 3
              }
            ]
          }
        ],
        "bookingOptions": [
          {
            "bookingId": "booking-1",
            "providerCode": "123milhas",
            "providerName": "123Milhas",
            "price": {
              "currency": "BRL",
              "amount": 372,
              "localizedPrice": "R$ 372"
            },
            "totalPrice": {
              "currency": "BRL",
              "amount": 372,
              "localizedPrice": "R$ 372"
            },
            "basePrice": {
              "currency": "BRL",
              "amount": 372,
              "localizedPrice": "R$ 372"
            },
            "rawPrice": {
              "currency": "BRL",
              "amount": 372,
              "localizedPrice": "R$ 372"
            },
            "countryName": "Brasil",
            "bookingUrl": "https://www.kayak.com.br/book/flight",
            "universalLinkUrl": "kayak://book/flight",
            "isDirect": false
          }
        ]
      }
    ]
  }
}

Complete field reference

PathTypeDescriptionExample
data.airlines[].code string Airline code. G3
data.airlines[].name string | null Name of the airline, when provided. GOL
data.airports[].code string Code IATA of the referenced airport. GRU
data.cheapestPrice.amount number | null Numerical value of the lowest fare. 372
data.cheapestPrice.currency string | null Currency of the lowest fare. BRL
data.cheapestPrice.localizedPrice string | null Localized price text of the lowest fare. R$ 372
data.complete boolean Indicates whether KAYAK marked the search as complete. true
data.currency string Currency used in the x-kayak-currency-code header. BRL
data.departureDate string (YYYY-MM-DD) Departure date in YYYY-MM-DD. 2026-06-20
data.extractedAt string (iso datetime) Extraction time in ISO 8601. 2026-05-14T15:00:00.000Z
data.filteredCount number | null Number of filtered results, when KAYAK reports this data. 0
data.from string Airport IATA of origin. GRU
data.items[].bookingOptions[].providerName string | null Name of the purchase option supplier. 123Milhas
data.items[].bookingOptions[].totalPrice.localizedPrice string | null Localized text of the total price of the call option. R$ 372
data.items[].legs[].destination string | null Leg destination airport. GIG
data.items[].legs[].durationMinutes number | null Leg duration in minutes. 65
data.items[].legs[].origin string | null Airport of origin of the leg. GRU
data.items[].legs[].segments[].flightNumber string | null Flight number in the segment. 1234
data.items[].legs[].stops number | null Number of leg scales. 0
data.items[].position number Position of the item in the normalized response. 1
data.items[].price.amount number | null Numeric value of the main price. 372
data.items[].price.localizedPrice string | null Localized text of the main price. R$ 372
data.items[].resultId string | null Result identifier in KAYAK. result-1
data.lang string Language used in headers and in the locale app. pt-BR
data.listedResults number Quantity of normalized items returned in JSON. 15
data.numAdults number Number of adult passengers. 1
data.numChildren number Number of children. 0
data.numInfants number Number of babies in arms. 0
data.page number Page requested. 1
data.pageSize number Number of results requested per page. 15
data.parser "1.0.0" Stable version of the API response format. 1.0.0
data.pollsPerformed number Number of polling calls made until results were obtained. 2
data.pollUrl string KAYAK mobile endpoint used for polling results. https://www.kayak.com.br/i/api/search/v2/flights/poll
data.providers[].code string Supplier internal code in KAYAK. 123milhas
data.providers[].displayName string | null Public name of the supplier. 123Milhas
data.requestUrl string Same value as `data.url`; never exposes the queried internal endpoint. https://www.kayak.com.br/flights/GRU-GIG/2026-06-20/2026-06-27
data.returnDate string | null Back date in YYYY-MM-DD or null. 2026-06-27
data.searchId string | null Poll identifier returned by KAYAK to continue polling. kayak-search-id
data.searchType string (ONE_WAY | ROUND_TRIP) ONE_WAY when there is no returnDate; ROUND_TRIP when there is a return. ROUND_TRIP
data.source string Source consulted. kayak.com.br
data.status string | null Raw polling status of KAYAK. complete
data.success boolean Indicates whether the search returned a usable answer. true
data.to string Destination airport IATA. GIG
data.totalResults number Total results reported by KAYAK. 1111
data.type string Type of the executed API. plp
data.url string URL publishes canonical search query KAYAK. https://www.kayak.com.br/flights/GRU-GIG/2026-06-20/2026-06-27
executionId string (uuid) Idempotent execution identifier. 99999999-2222-4222-8222-999999999999
requestId string (uuid) Request identifier at the GeckoAPI gateway. 99999999-1111-4111-8111-999999999999

Errors and missing data

When supported by this operation, an entity not found upstream can return HTTP 200 with data: null and notFound: true. Check the documented response fields before interpreting an empty result. Source-specific behavior and exceptions are described above.

HTTP statusError codeMeaning
400INVALID_PAYLOADInvalid JSON or a request that violates the documented validation rules.
401UNAUTHORIZEDMissing authorization or an invalid API key or token.
402INSUFFICIENT_CREDITSThe account has insufficient credits for this operation.
403FORBIDDENThe account does not have access, or the API is temporarily disabled.
409EXECUTION_CONFLICTThe execution identifier conflicts with an incompatible execution state.
429RATE_LIMIT_EXCEEDED / TOO_MANY_INFLIGHT_REQUESTSA rate limit or simultaneous request limit was exceeded.
5xxUPSTREAM_TIMEOUT / UPSTREAM_HTTP_ERROR / WORKER_FUNCTION_ERRORAn upstream, worker or gateway failure. Failed requests follow the platform refund policy.