// docs

LATAM Flights Search

Extrai opcoes de voos e tarifas da LATAM por aeroporto de origem/destino, datas e passageiros. A API usa renderizacao com captura de rede para ler as ofertas retornadas pelo BFF da LATAM.

Tempo de resposta: Em algumas execuções, esta API pode levar até 1 minuto para responder. Isso é normal para este endpoint. Aguarde a conclusão da requisição e tenha paciência.

Nota importante: alguns campos podem retornar null em produção, dependendo da página de origem. Nesta documentação, os exemplos de output são preenchidos intencionalmente com valores não nulos para facilitar integração.

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": "latamairlines.com",
  "type": "plp",
  "from": "GRU",
  "to": "GIG",
  "departureDate": "2026-05-17",
  "numAdults": 1,
  "numChildren": 0,
  "numInfants": 0
}'

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

latamairlines_com_plp

Auth

Bearer ou X-API-Key

latamairlines_com_plp tools/call
{
  "jsonrpc": "2.0",
  "id": 3,
  "method": "tools/call",
  "params": {
    "name": "latamairlines_com_plp",
    "arguments": {
      "from": "GRU",
      "to": "GIG",
      "departureDate": "2026-05-17",
      "numAdults": 1,
      "numChildren": 0,
      "numInfants": 0,
      "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
url
URL alvo da extração. Para alguns PLPs pode ser omitida quando a API monta a URL a partir de outros campos.
string (URL) Opcional Opcional. Quando informado, deve ser uma URL de oferta de voos da LATAM em latamairlines.com. Sem URL, envie from, to e departureDate. - https://www.mercadolivre.com.br/p/MLB123456
from
Codigo IATA do aeroporto de origem para busca PLP da Decolar, GOL e LATAM.
string (IATA 3 letras) Obrigatório Codigo IATA do aeroporto de origem com 3 letras (ex: GRU). Obrigatorio quando url nao for enviada. - GRU
to
Codigo IATA do aeroporto de destino para busca PLP da Decolar, GOL e LATAM.
string (IATA 3 letras) Obrigatório Codigo IATA do aeroporto de destino com 3 letras (ex: GIG). Obrigatorio quando url nao for enviada. - GIG
departureDate
Data de saida para busca PLP da ClickBus, Decolar, GOL e LATAM.
string (YYYY-MM-DD) Obrigatório Data de ida no formato YYYY-MM-DD. Obrigatoria quando url nao for enviada. - 2026-05-17
returnDate
Data de retorno opcional para busca PLP da ClickBus, Decolar, GOL e LATAM.
string (YYYY-MM-DD) Opcional Data de volta no formato YYYY-MM-DD. Deve ser maior ou igual a departureDate. - 2026-05-20
target
Fonte alvo da extração.
enum Obrigatório Sempre obrigatorio e deve ser latamairlines.com. - mercadolivre.com.br
type
Tipo da extração: pdp, idp, plp, quote, review ou places.
enum Obrigatório Sempre obrigatorio e deve ser plp. - pdp
numAdults
Quantidade de adultos para Booking, Airbnb, Hoteis.com, Decolar, GOL e LATAM.
integer (1-30) Opcional Quantidade de adultos. Deve ser inteiro entre 1 e 9. 1 2
numChildren
Quantidade de crianças para Booking, Hoteis.com, Decolar, GOL e LATAM.
integer (0-30) Opcional Quantidade de criancas. Deve ser inteiro entre 0 e 9. 0 0
numInfants
Quantidade de bebês para GOL e LATAM PLP. Deve ser menor ou igual à quantidade de adultos.
integer (0-9) Opcional Quantidade de bebes. Deve ser inteiro entre 0 e 9 e menor ou igual a numAdults. 0 0

Exemplos de request

Busca LATAM - somente ida

Busca one-way por aeroportos IATA com adultos, criancas e bebes.

Busca LATAM - somente ida
{
  "target": "latamairlines.com",
  "type": "plp",
  "from": "GRU",
  "to": "GIG",
  "departureDate": "2026-05-17",
  "numAdults": 1,
  "numChildren": 0,
  "numInfants": 0
}

Busca LATAM - ida e volta

Busca round-trip por aeroportos IATA com data de retorno.

Busca LATAM - ida e volta
{
  "target": "latamairlines.com",
  "type": "plp",
  "from": "BSB",
  "to": "SDU",
  "departureDate": "2026-06-10",
  "returnDate": "2026-06-15",
  "numAdults": 2,
  "numChildren": 1,
  "numInfants": 0
}

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": "string",
  "data.type": "string",
  "data.parser": "string",
  "data.url": "string",
  "data.requestUrl": "string",
  "data.capturedOffersUrl": "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",
  "data.numAdults": "number",
  "data.numChildren": "number",
  "data.numInfants": "number",
  "data.cabin": "string",
  "data.redemption": "boolean",
  "data.sort": "string",
  "data.success": "boolean",
  "data.listing.totalElements": "number",
  "data.listing.numberOfElements": "number",
  "data.listing.captureStatusCode": "number",
  "data.requestUsage.renderedRequests": "number",
  "data.requestUsage.retriedWithWait": "boolean",
  "data.totalFlightOptions": "number",
  "data.totalResults": "number",
  "data.items[].recordType": "string",
  "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",
  "data.items[].route.arrival": "string",
  "data.items[].flight.flightCode": "string",
  "data.items[].flight.durationMinutes": "number",
  "data.items[].flight.stops": "number",
  "data.items[].flight.segments[].flightNumber": "string",
  "data.items[].fare.brandId": "string",
  "data.items[].fare.brandText": "string",
  "data.items[].fare.cabinLabel": "string",
  "data.items[].price.currency": "string",
  "data.items[].price.amount": "number",
  "data.items[].price.display": "string",
  "data.items[].price.total": "number"
}

Exemplo de response

responseExample
{
  "requestId": "99999999-1111-4111-8111-999999999999",
  "executionId": "99999999-2222-4222-8222-999999999999",
  "data": {
    "source": "latamairlines.com",
    "type": "plp",
    "parser": "browser_network_capture",
    "url": "https://www.latamairlines.com/br/pt/oferta-voos?origin=GRU&outbound=2026-05-17T00:00:00.000Z&destination=GIG&adt=1&chd=0&inf=0&trip=OW&cabin=Economy&redemption=false&sort=RECOMMENDED&exp_id=99999999-3333-4333-8333-999999999999",
    "requestUrl": "https://www.latamairlines.com/br/pt/oferta-voos?origin=GRU&outbound=2026-05-17T00:00:00.000Z&destination=GIG&adt=1&chd=0&inf=0&trip=OW&cabin=Economy&redemption=false&sort=RECOMMENDED&exp_id=99999999-3333-4333-8333-999999999999",
    "capturedOffersUrl": "https://www.latamairlines.com/bff/air-offers/offers/search?origin=GRU&destination=GIG",
    "extractedAt": "2026-05-04T18:00:00.000Z",
    "searchType": "ONE_WAY",
    "from": "GRU",
    "to": "GIG",
    "departureDate": "2026-05-17",
    "returnDate": "",
    "numAdults": 1,
    "numChildren": 0,
    "numInfants": 0,
    "cabin": "Economy",
    "redemption": false,
    "sort": "RECOMMENDED",
    "success": true,
    "listing": {
      "totalElements": 1,
      "numberOfElements": 1,
      "captureStatusCode": 200
    },
    "requestUsage": {
      "renderedRequests": 1,
      "retriedWithWait": false
    },
    "totalFlightOptions": 1,
    "totalResults": 1,
    "items": [
      {
        "recordType": "flight_price",
        "position": {
          "flightOption": 1,
          "brand": 1
        },
        "route": {
          "originIata": "GRU",
          "destinationIata": "GIG",
          "departure": "2026-05-17T10:00:00.000Z",
          "arrival": "2026-05-17T11:10:00.000Z"
        },
        "flight": {
          "flightCode": "LA1234",
          "durationMinutes": 70,
          "stops": 0,
          "segments": [
            {
              "flightNumber": "1234"
            }
          ]
        },
        "fare": {
          "brandId": "LIGHT",
          "brandText": "Light",
          "cabinLabel": "Economy"
        },
        "price": {
          "currency": "BRL",
          "amount": 399.9,
          "display": "R$ 399,90",
          "total": 399.9
        }
      }
    ]
  }
}

Referência completa de campos

Path Tipo Descrição Exemplo
data.cabin string Cabine solicitada. Economy
data.capturedOffersUrl string URL BFF capturada com o JSON de ofertas. https://www.latamairlines.com/bff/air-offers/offers/search?origin=GRU&destination=GIG
data.departureDate string (YYYY-MM-DD) Data de ida enviada na requisicao. 2026-05-17
data.extractedAt string (iso datetime) Momento da extracao em ISO 8601. 2026-05-04T18:00:00.000Z
data.from string Aeroporto IATA de origem. GRU
data.items[].fare.brandId string Identificador da marca tarifaria. LIGHT
data.items[].fare.brandText string Nome legivel da marca tarifaria. Light
data.items[].fare.cabinLabel string Cabine da tarifa. Economy
data.items[].flight.durationMinutes number Duracao em minutos. 70
data.items[].flight.flightCode string Codigo do voo resumido pela LATAM. LA1234
data.items[].flight.segments[].flightNumber string Numero do voo no segmento. 1234
data.items[].flight.stops number Numero de escalas. 0
data.items[].position.brand number Posicao da marca tarifaria dentro da opcao. 1
data.items[].position.flightOption number Posicao da opcao de voo na resposta. 1
data.items[].price.amount number Valor numerico da tarifa. 399.9
data.items[].price.currency string Moeda do preco. BRL
data.items[].price.display string Preco formatado pela LATAM. R$ 399,90
data.items[].price.total number Total informado pelo breakdown de preco. 399.9
data.items[].recordType string Tipo do item normalizado. flight_price
data.items[].route.arrival string Data/hora de chegada. 2026-05-17T11:10:00.000Z
data.items[].route.departure string Data/hora de partida. 2026-05-17T10:00:00.000Z
data.items[].route.destinationIata string Aeroporto de destino. GIG
data.items[].route.originIata string Aeroporto de origem. GRU
data.listing.captureStatusCode number Status HTTP da chamada BFF capturada. 200
data.listing.numberOfElements number Quantidade de opcoes retornadas na pagina capturada. 1
data.listing.totalElements number Total de opcoes informado pelo BFF. 1
data.numAdults number Quantidade de adultos usada na busca. 1
data.numChildren number Quantidade de criancas usada na busca. 0
data.numInfants number Quantidade de bebes usada na busca. 0
data.parser string Parser usado para estruturar a resposta. browser_network_capture
data.redemption boolean Indica se a busca e de resgate. false
data.requestUrl string URL renderizada para capturar as chamadas BFF da LATAM. https://www.latamairlines.com/br/pt/oferta-voos?origin=GRU&outbound=2026-05-17T00:00:00.000Z&destination=GIG&adt=1&chd=0&inf=0&trip=OW&cabin=Economy&redemption=false&sort=RECOMMENDED&exp_id=99999999-3333-4333-8333-999999999999
data.requestUsage.renderedRequests number Quantidade de renderizacoes Zyte usadas. 1
data.requestUsage.retriedWithWait boolean Indica se houve retry com espera. false
data.returnDate string Data de volta enviada na requisicao, quando existir.
data.searchType string (ONE_WAY | ROUND_TRIP) ONE_WAY quando nao ha returnDate; ROUND_TRIP quando ha volta. ONE_WAY
data.sort string Ordenacao enviada para a LATAM. RECOMMENDED
data.source string Fonte consultada. latamairlines.com
data.success boolean Indica se o JSON de ofertas foi capturado. true
data.to string Aeroporto IATA de destino. GIG
data.totalFlightOptions number Quantidade de opcoes de voo antes de expandir marcas tarifarias. 1
data.totalResults number Quantidade de linhas de tarifa retornadas. 1
data.type string Tipo da API executada. plp
data.url string URL publica canonica da busca LATAM. https://www.latamairlines.com/br/pt/oferta-voos?origin=GRU&outbound=2026-05-17T00:00:00.000Z&destination=GIG&adt=1&chd=0&inf=0&trip=OW&cabin=Economy&redemption=false&sort=RECOMMENDED&exp_id=99999999-3333-4333-8333-999999999999
executionId string (uuid) Identificador idempotente da execucao. 99999999-2222-4222-8222-999999999999
requestId string (uuid) Identificador da requisicao no gateway da GeckoAPI. 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.