// docs

Trip.com Flights Search

Consulta voos de ida em classe econômica na Trip.com por aeroportos, data e passageiros. Retorna companhias, segmentos, horários locais e tarifas em JSON. Custo: 5 créditos por consulta.

Tempo de resposta: Os valores e a disponibilidade refletem o momento da consulta e podem mudar antes da compra. Totais exibidos podem ter arredondamento; o detalhamento por passageiro preserva os valores recebidos.

Nota importante: alguns campos podem retornar null em produção, dependendo da página de origem. Consulte o schema e a descrição de cada campo para tratar valores ausentes; os exemplos mostram uma resposta possível.

Quando a entidade consultada não existe na origem, o extract e a tool MCP retornam 200 com data: null e notFound: true. Esse caso é tratado como resposta concluída, não como erro de servidor.

Chamada HTTP

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

Chamada MCP

A mesma seam também aparece no MCP hospedado como uma tool dedicada. Os argumentos reaproveitam os campos do extract, mas target e type já ficam fixos pela tool.

Ver guia completo do MCP

Endpoint

POST /v1/mcp

Tool name

trip_com_plp

Auth

Bearer ou X-API-Key

trip_com_plp tools/call
{
  "jsonrpc": "2.0",
  "id": 3,
  "method": "tools/call",
  "params": {
    "name": "trip_com_plp",
    "arguments": {
      "from": "GRU",
      "to": "GIG",
      "departureDate": "2026-10-17",
      "numAdults": 1,
      "numChildren": 0,
      "numInfants": 0,
      "currency": "BRL",
      "lang": "pt-BR",
      "executionId": "exec_example_123"
    }
  }
}

Possibilidades de input

Campos suportados nesta API do POST /v1/extract, com regras específicas de obrigatoriedade e condicionais.

Campo Tipo Status Regra Default Exemplo
from
Codigo IATA do aeroporto de origem para busca PLP da Decolar, GOL, Azul, LATAM, Trip.com, KAYAK, MaxMilhas e 123Milhas.
string (IATA 3 letras) Obrigatório Código IATA de aeroporto com 3 letras (ex: GRU). Códigos de cidade, como SAO, não são suportados neste endpoint. - GRU
to
Codigo IATA do aeroporto de destino para busca PLP da Decolar, GOL, Azul, LATAM, Trip.com, KAYAK, MaxMilhas e 123Milhas.
string (IATA 3 letras) Obrigatório Código IATA do aeroporto de destino com 3 letras (ex: GIG), diferente da origem. - GIG
departureDate
Data de saida para busca PLP da ClickBus, Decolar, GOL, Azul, LATAM, Trip.com, KAYAK, MaxMilhas e 123Milhas.
string (YYYY-MM-DD) Obrigatório Data válida em YYYY-MM-DD, a partir de hoje. Tarifas de somente ida em classe econômica. - 2026-10-17
target
Fonte alvo da extração.
enum Obrigatório Use trip.com. - trip.com
type
Tipo da extração: pdp, idp, plp, ilp, quote, review ou places.
enum Obrigatório Use plp. - plp
numAdults
Quantidade de adultos para Booking, Airbnb, Hoteis.com, Trivago, Decolar, GOL, Azul, LATAM e Trip.com.
integer (1-30) Opcional Inteiro de 1 a 9. Adultos e crianças somados não podem exceder 9. 1 1
numChildren
Quantidade de criancas para Booking, Hoteis.com, Trivago, Decolar, GOL, Azul, LATAM e Trip.com.
integer (0-30) Opcional Inteiro de 0 a 9, respeitando o limite de 9 adultos e crianças somados. 0 0
numInfants
Quantidade de bebes para GOL, Azul, LATAM e Trip.com PLP. Deve ser menor ou igual a quantidade de adultos.
integer (0-9) Opcional Inteiro de 0 a 9, menor ou igual ao número de adultos. 0 0
lang
Idioma para Booking e Trivago (default no backend: pt-br).
string (ll ou ll-cc) Opcional Idioma e região no formato ll-CC. pt-BR pt-BR
currency
Moeda para Booking, Trivago e Azul (default no backend: BRL).
string (ISO 4217) Opcional Código de moeda com 3 letras. A consulta falha se a fonte retornar outra moeda. BRL BRL

Exemplos de request

Voos GRU → GIG — somente ida

Busca para um adulto, em reais e português do Brasil. Substitua departureDate pela data futura desejada.

Voos GRU → GIG — somente ida
{
  "target": "trip.com",
  "type": "plp",
  "from": "GRU",
  "to": "GIG",
  "departureDate": "2026-10-17",
  "numAdults": 1,
  "numChildren": 0,
  "numInfants": 0,
  "currency": "BRL",
  "lang": "pt-BR"
}

Voos GRU → LIS — dois adultos

Aeroportos exatos e total para dois adultos. Substitua a data pelo dia da sua viagem.

Voos GRU → LIS — dois adultos
{
  "target": "trip.com",
  "type": "plp",
  "from": "GRU",
  "to": "LIS",
  "departureDate": "2026-10-19",
  "numAdults": 2
}

Schema de response (leaf paths)

Mapa de paths de saída com tipo esperado para esta API.

responseSchema
{
  "requestId": "string (uuid)",
  "executionId": "string (uuid)",
  "data.source": "\"trip.com\"",
  "data.type": "\"plp\"",
  "data.parser": "\"1.0.0\"",
  "data.url": "string",
  "data.requestUrl": "string",
  "data.extractedAt": "string (iso datetime)",
  "data.searchType": "\"ONE_WAY\"",
  "data.from": "string",
  "data.to": "string",
  "data.departureDate": "string (YYYY-MM-DD)",
  "data.numAdults": "number",
  "data.numChildren": "number",
  "data.numInfants": "number",
  "data.currency": "string",
  "data.lang": "string",
  "data.cabin": "\"Economy\"",
  "data.success": "boolean",
  "data.totalFlightOptions": "number",
  "data.totalResults": "number",
  "data.listing.reportedFlightOptions": "number | null",
  "data.listing.excludedFlightOptions": "number",
  "data.requestUsage.requests": "number",
  "data.items[].recordType": "\"flight_price\"",
  "data.items[].position.flightOption": "number",
  "data.items[].position.brand": "number",
  "data.items[].route.originIata": "string",
  "data.items[].route.destinationIata": "string",
  "data.items[].route.departure": "string | null",
  "data.items[].route.arrival": "string | null",
  "data.items[].flight.id": "string | null",
  "data.items[].flight.flightCode": "string",
  "data.items[].flight.durationMinutes": "number | null",
  "data.items[].flight.stops": "number",
  "data.items[].fare.cabinLabel": "string",
  "data.items[].fare.cabinClasses": "array<object>",
  "data.items[].fare.seatCount": "number | null",
  "data.items[].fare.tags[].key": "string | null",
  "data.items[].fare.tags[].text": "string | null",
  "data.items[].fare.tags[].description": "string | null",
  "data.items[].fare.flags": "array<string>",
  "data.items[].price.currency": "string",
  "data.items[].price.amount": "number | null",
  "data.items[].price.total": "number",
  "data.items[].price.totalTax": "number | null",
  "data.items[].price.adult": "object | null",
  "data.items[].price.child": "object | null",
  "data.items[].price.infant": "object | null",
  "data.items[].price.referencePrices": "array<object>",
  "data.items[].flight.segments[].flightNumber": "string | null",
  "data.items[].flight.segments[].airlineCode": "string | null",
  "data.items[].flight.segments[].airlineName": "string | null",
  "data.items[].flight.segments[].originIata": "string | null",
  "data.items[].flight.segments[].destinationIata": "string | null",
  "data.items[].flight.segments[].originName": "string | null",
  "data.items[].flight.segments[].destinationName": "string | null",
  "data.items[].flight.segments[].originCity": "string | null",
  "data.items[].flight.segments[].destinationCity": "string | null",
  "data.items[].flight.segments[].departure": "string | null",
  "data.items[].flight.segments[].arrival": "string | null",
  "data.items[].flight.segments[].departureTerminal": "string | null",
  "data.items[].flight.segments[].arrivalTerminal": "string | null",
  "data.items[].flight.segments[].departureUtcOffsetHours": "number | null",
  "data.items[].flight.segments[].arrivalUtcOffsetHours": "number | null",
  "data.items[].flight.segments[].durationMinutes": "number | null",
  "data.items[].flight.segments[].aircraft": "object",
  "data.items[].flight.segments[].technicalStops": "array<object>"
}

Exemplo de response

responseExample
{
  "requestId": "99999999-1111-4111-8111-999999999999",
  "executionId": "99999999-2222-4222-8222-999999999999",
  "data": {
    "source": "trip.com",
    "type": "plp",
    "parser": "1.0.0",
    "url": "https://br.trip.com/flights/showfarefirst?dcity=gru&acity=gig&ddate=2026-10-17&triptype=ow&class=y&quantity=1&childqty=0&babyqty=0&curr=BRL",
    "requestUrl": "https://br.trip.com/flights/showfarefirst?dcity=gru&acity=gig&ddate=2026-10-17&triptype=ow&class=y&quantity=1&childqty=0&babyqty=0&curr=BRL",
    "extractedAt": "2026-09-17T15:05:38.190Z",
    "searchType": "ONE_WAY",
    "from": "GRU",
    "to": "GIG",
    "departureDate": "2026-10-17",
    "numAdults": 1,
    "numChildren": 0,
    "numInfants": 0,
    "currency": "BRL",
    "lang": "pt-BR",
    "cabin": "Economy",
    "success": true,
    "totalFlightOptions": 1,
    "totalResults": 1,
    "listing": {
      "reportedFlightOptions": 1,
      "excludedFlightOptions": 0
    },
    "requestUsage": {
      "requests": 1
    },
    "items": [
      {
        "recordType": "flight_price",
        "position": {
          "flightOption": 1,
          "brand": 1
        },
        "route": {
          "originIata": "GRU",
          "destinationIata": "GIG",
          "departure": "2026-10-17T04:35:00",
          "arrival": "2026-10-17T05:40:00"
        },
        "flight": {
          "id": "example-flight-id",
          "flightCode": "G31524",
          "durationMinutes": 65,
          "stops": 0,
          "segments": [
            {
              "flightNumber": "G31524",
              "airlineCode": "G3",
              "airlineName": "Gol Linhas Aéreas Inteligentes",
              "originIata": "GRU",
              "destinationIata": "GIG",
              "originName": "Aeroporto Internacional de São Paulo/Guarulhos–Governador André Franco Montoro",
              "destinationName": "Aeroporto Internacional do Rio de Janeiro - Galeão – Antonio Carlos Jobim",
              "originCity": "São Paulo",
              "destinationCity": "Rio de Janeiro",
              "departure": "2026-10-17T04:35:00",
              "arrival": "2026-10-17T05:40:00",
              "departureTerminal": "T2",
              "arrivalTerminal": "T2",
              "departureUtcOffsetHours": -3,
              "arrivalUtcOffsetHours": -3,
              "durationMinutes": 65,
              "aircraft": {
                "craftType": "7M8",
                "name": "Boeing 737 MAX 8",
                "widthLevel": "N",
                "minSeats": 162,
                "maxSeats": 178,
                "level": 2,
                "levelName": "Aeronave média",
                "shortName": "Boeing 737 MAX 8"
              },
              "technicalStops": []
            }
          ]
        },
        "fare": {
          "cabinLabel": "Econômica",
          "cabinClasses": [
            {
              "segmentNo": 1,
              "grade": 1,
              "journeyNo": 1,
              "mainSegment": true,
              "subClass": "O",
              "gradeMultilingual": "Econômica"
            }
          ],
          "seatCount": 7,
          "tags": [
            {
              "key": "FREE_CARRY_ON_BAGGAGE",
              "text": "Bagagem de mão incluída",
              "description": "{\"detailList\":[{\"contentList\":[\"1\"],\"subject\":\"Count\"},{\"contentList\":[\"Bagagem de mão: 12 kg\"],\"merge\":false,\"subject\":\"DetailContent\"}]}"
            },
            {
              "key": "LOW_SEAT_COUNT",
              "text": "menos de 9",
              "description": null
            }
          ],
          "flags": [
            "BRAND_POLICY",
            "DIRECT_LOWEST_PRICE",
            "DIRECT_FLIGHT",
            "LOWEST_PRICE",
            "LCC",
            "ECONOMY",
            "PRIORITIZING",
            "BRAND_FARE",
            "FREE_CARRY_ON_BAGGAGE"
          ]
        },
        "price": {
          "currency": "BRL",
          "amount": 376,
          "total": 376,
          "totalTax": 36.15,
          "adult": {
            "salePrice": 339.13,
            "tax": 36.15,
            "discount": 0,
            "totalPrice": 375.28,
            "morePrice": {
              "ticketTotalPrice": 375.28,
              "flightHotelDiscount": 0
            }
          },
          "child": null,
          "infant": null,
          "referencePrices": [
            {
              "crossOutType": "StrikeThroughPrice",
              "amount": 393
            }
          ]
        }
      }
    ]
  }
}

Referência completa de campos

Path Tipo Descrição Exemplo
data.cabin "Economy" Cabine econômica. Economy
data.currency string Moeda solicitada e confirmada na resposta. BRL
data.departureDate string (YYYY-MM-DD) Data de saída solicitada. 2026-10-17
data.extractedAt string (iso datetime) Momento da extração em UTC. 2026-09-17T15:05:38.190Z
data.from string Aeroporto IATA de origem. GRU
data.items[].fare.cabinClasses array<object> Classes e subclasses tarifárias por segmento, quando disponíveis. [{"segmentNo":1,"grade":1,"journeyNo":1,"mainSegment":true,"subClass":"O","gradeMultilingual":"Econômica"}]
data.items[].fare.cabinLabel string Nome da cabine informado pela fonte. Econômica
data.items[].fare.flags array<string> Indicadores de tarifa informados pela Trip.com. ["BRAND_POLICY","DIRECT_LOWEST_PRICE","DIRECT_FLIGHT","LOWEST_PRICE","LCC","ECONOMY","PRIORITIZING","BRAND_FARE","FREE_CARRY_ON_BAGGAGE"]
data.items[].fare.seatCount number | null Disponibilidade de assentos informada para a tarifa, sujeita a alteração. 7
data.items[].fare.tags[].description string | null Detalhes originais da característica, podendo conter JSON serializado. {"detailList":[{"contentList":["1"],"subject":"Count"},{"contentList":["Bagagem de mão: 12 kg"],"merge":false,"subject":"DetailContent"}]}
data.items[].fare.tags[].key string | null Identificador da característica da tarifa. FREE_CARRY_ON_BAGGAGE
data.items[].fare.tags[].text string | null Texto original da característica, podendo conter JSON serializado. Bagagem de mão incluída
data.items[].flight.durationMinutes number | null Duração total da viagem em minutos, informada pela fonte. 65
data.items[].flight.flightCode string Números dos voos da opção, separados por / quando houver conexões. G31524
data.items[].flight.id string | null Identificador da opção retornada; não constitui reserva. example-flight-id
data.items[].flight.segments[].aircraft object Dados da aeronave informados pela fonte, como craftType e name. {"craftType":"7M8","name":"Boeing 737 MAX 8","widthLevel":"N","minSeats":162,"maxSeats":178,"level":2,"levelName":"Aeronave média","shortName":"Boeing 737 MAX 8"}
data.items[].flight.segments[].airlineCode string | null Código da companhia aérea. G3
data.items[].flight.segments[].airlineName string | null Nome da companhia aérea. Gol Linhas Aéreas Inteligentes
data.items[].flight.segments[].arrival string | null Chegada local, sem conversão para UTC. 2026-10-17T05:40:00
data.items[].flight.segments[].arrivalTerminal string | null Terminal de chegada, quando disponível. T2
data.items[].flight.segments[].arrivalUtcOffsetHours number | null Diferença para UTC em horas informada para a cidade de chegada. -3
data.items[].flight.segments[].departure string | null Partida local, sem conversão para UTC. 2026-10-17T04:35:00
data.items[].flight.segments[].departureTerminal string | null Terminal de partida, quando disponível. T2
data.items[].flight.segments[].departureUtcOffsetHours number | null Diferença para UTC em horas informada para a cidade de partida. -3
data.items[].flight.segments[].destinationCity string | null Cidade de chegada. Rio de Janeiro
data.items[].flight.segments[].destinationIata string | null Aeroporto de chegada do segmento. GIG
data.items[].flight.segments[].destinationName string | null Nome do aeroporto de chegada. Aeroporto Internacional do Rio de Janeiro - Galeão – Antonio Carlos Jobim
data.items[].flight.segments[].durationMinutes number | null Duração do segmento em minutos. 65
data.items[].flight.segments[].flightNumber string | null Número completo do voo. G31524
data.items[].flight.segments[].originCity string | null Cidade de partida. São Paulo
data.items[].flight.segments[].originIata string | null Aeroporto de partida do segmento. GRU
data.items[].flight.segments[].originName string | null Nome do aeroporto de partida. Aeroporto Internacional de São Paulo/Guarulhos–Governador André Franco Montoro
data.items[].flight.segments[].technicalStops array<object> Paradas técnicas reportadas pela fonte, separadas das conexões. []
data.items[].flight.stops number Número de conexões entre segmentos. Paradas técnicas ficam em segments[].technicalStops. 0
data.items[].position.brand number Posição da tarifa dentro da opção de voo. 1
data.items[].position.flightOption number Posição da opção de voo na resposta da fonte; pode conter lacunas após a filtragem. 1
data.items[].price.adult object | null Valores por adulto: salePrice, tax e totalPrice, quando disponíveis. Preserva a precisão original, que pode diferir do total exibido. {"salePrice":339.13,"tax":36.15,"discount":0,"totalPrice":375.28,"morePrice":{"ticketTotalPrice":375.28,"flightHotelDiscount":0}}
data.items[].price.amount number | null Preço médio por passageiro exibido pela fonte, que pode ser arredondado. 376
data.items[].price.child object | null Valores por criança, quando disponíveis; null quando ausentes. null
data.items[].price.currency string Moeda dos valores. BRL
data.items[].price.infant object | null Valores por bebê, quando disponíveis; null quando ausentes. null
data.items[].price.referencePrices array<object> Preços de referência ou riscados informados pela fonte; não são o total a pagar. [{"crossOutType":"StrikeThroughPrice","amount":393}]
data.items[].price.total number Total exibido para todos os passageiros da busca. Pode ser arredondado pela Trip.com. 376
data.items[].price.totalTax number | null Total de taxas informado pela fonte. 36.15
data.items[].recordType "flight_price" Cada item representa uma tarifa de uma opção de voo. flight_price
data.items[].route.arrival string | null Chegada no horário local do aeroporto, sem sufixo UTC. 2026-10-17T05:40:00
data.items[].route.departure string | null Partida no horário local do aeroporto, sem sufixo UTC. 2026-10-17T04:35:00
data.items[].route.destinationIata string Aeroporto de destino solicitado. GIG
data.items[].route.originIata string Aeroporto de origem solicitado. GRU
data.lang string Idioma e região solicitados. pt-BR
data.listing.excludedFlightOptions number Opções descartadas por aeroportos ou data diferentes, transporte não aéreo ou tarifa ausente. 0
data.listing.reportedFlightOptions number | null Quantidade informada pela Trip.com, incluindo eventuais sugestões de outros aeroportos. 1
data.numAdults number Quantidade de adultos. 1
data.numChildren number Quantidade de crianças. 0
data.numInfants number Quantidade de bebês. 0
data.parser "1.0.0" Versão do formato público da resposta. 1.0.0
data.requestUrl string Mesmo valor de data.url. https://br.trip.com/flights/showfarefirst?dcity=gru&acity=gig&ddate=2026-10-17&triptype=ow&class=y&quantity=1&childqty=0&babyqty=0&curr=BRL
data.requestUsage.requests number Requisições à fonte necessárias para concluir a busca. O preço da consulta continua sendo 5 créditos. 1
data.searchType "ONE_WAY" Busca de somente ida. ONE_WAY
data.source "trip.com" Fonte consultada. trip.com
data.success boolean Indica uma resposta válida, inclusive quando não há voos. true
data.to string Aeroporto IATA de destino. GIG
data.totalFlightOptions number Opções de voo com tarifas válidas para os aeroportos e a data solicitados. 1
data.totalResults number Quantidade de tarifas em items. Um voo pode ter várias tarifas. 1
data.type "plp" Tipo da consulta. plp
data.url string URL pública correspondente à busca. https://br.trip.com/flights/showfarefirst?dcity=gru&acity=gig&ddate=2026-10-17&triptype=ow&class=y&quantity=1&childqty=0&babyqty=0&curr=BRL
executionId string (uuid) Identificador idempotente da execução. 99999999-2222-4222-8222-999999999999
requestId string (uuid) Identificador da requisição no gateway. 99999999-1111-4111-8111-999999999999

Erros comuns

Respostas com notFound: true não entram nesta tabela, porque retornam sucesso HTTP 200.

Status errorCode Quando acontece
400 INVALID_PAYLOAD JSON inválido ou violação das regras de validação do payload.
401 UNAUTHORIZED Header Authorization ausente ou token/chave inválida.
402 INSUFFICIENT_CREDITS Saldo de créditos insuficiente para a API solicitada.
403 FORBIDDEN Usuário sem acesso ou API temporariamente desabilitada.
409 EXECUTION_CONFLICT executionId conflita com uma execução em estado incompatível.
429 RATE_LIMIT_EXCEEDED / TOO_MANY_INFLIGHT_REQUESTS Limite de taxa ou limite de requisições em voo excedido.
5xx UPSTREAM_TIMEOUT / UPSTREAM_HTTP_ERROR / WORKER_INVOCATION_FAILED / WORKER_FUNCTION_ERROR / WORKER_INVALID_RESPONSE / INTERNAL_ERROR Falha de servidor no worker, provider/proxy ou gateway. Nesses casos os créditos são estornados automaticamente.