API para Milhas Aéreas: como consultar Smiles e Azul Pontos em JSON

30 de junho de 2026 · 11 min · Equipe GeckoAPI
API para Milhas Aéreas: como consultar Smiles e Azul Pontos em JSON

Quer testar? Acesse o dashboard e ganhe 100 créditos grátis para começar.

Ir para o Dashboard

Se você chegou aqui pesquisando por API para milhas aéreas, API Smiles, API Azul Pontos, API TudoAzul, API de passagens com pontos ou como consultar milhas aéreas por API, provavelmente quer transformar buscas de resgate em dados estruturados para um produto, dashboard, alerta ou automação.

Na prática, o desafio não é apenas descobrir se existe voo. Quem trabalha com milhas precisa comparar pontos, taxas, trechos, horários, companhias, escalas, classe tarifária e menor oferta em um formato que o sistema consiga ordenar, salvar e monitorar.

A GeckoAPI oferece endpoints para esse cenário usando a rota única:

POST https://api.geckoapi.com.br/v1/extract

Neste guia, o foco é em dois casos muito buscados no Brasil:

  • Smiles: ofertas de passagens com milhas/pontos, taxas, companhia, horários e trechos usando target: "smiles.com.br"
  • Azul Pontos/TudoAzul: disponibilidade da Azul com points: true, retornando opções em pontos no endpoint target: "voeazul.com.br"

O objetivo é permitir que travel apps, comparadores de passagens, alertas de milhas, backoffices de agência, BI de aviação, ETLs e agentes de IA trabalhem com dados de milhas aéreas em JSON, sem manter scraping próprio de páginas e fluxos instáveis.

TL;DR

Para consultar milhas aéreas via API na GeckoAPI:

POST https://api.geckoapi.com.br/v1/extract

Para Smiles, envie:

{
  "target": "smiles.com.br",
  "type": "plp",
  "from": "GRU",
  "to": "GIG",
  "departureDate": "2026-08-15",
  "returnDate": "2026-08-22",
  "numAdults": 1,
  "numChildren": 0,
  "numInfants": 0
}

Para Azul Pontos/TudoAzul, envie:

{
  "target": "voeazul.com.br",
  "type": "plp",
  "from": "CNF",
  "to": "VCP",
  "departureDate": "2026-08-15",
  "numAdults": 1,
  "numChildren": 0,
  "numInfants": 0,
  "currency": "BRL",
  "points": true
}

Nos dois casos, a resposta volta em JSON estruturado, com identificadores de requisição, rota, datas, passageiros, horários, opções de tarifa, pontos/milhas, taxas e dados úteis para encontrar a menor oferta.

O que é uma API para milhas aéreas

Uma API para milhas aéreas é uma interface HTTP que permite consultar programaticamente ofertas de passagens em pontos ou milhas. Em vez de abrir manualmente um site de programa de fidelidade, preencher origem, destino, data, passageiros e copiar resultados para uma planilha, sua aplicação envia uma requisição e recebe uma resposta estruturada.

Esse tipo de endpoint é útil quando você precisa:

  • monitorar menor oferta em pontos por rota e data
  • comparar Smiles, TudoAzul, LATAM Pass e outras fontes de viagem
  • criar alertas quando uma rota cair abaixo de um limite de pontos
  • alimentar dashboards de disponibilidade e resgate
  • registrar histórico de pontos, taxas e horários
  • responder perguntas em agentes de viagem com IA
  • enriquecer um CRM ou backoffice de agência
  • montar uma camada de metabusca de passagens com milhas

O ponto central é que milhas aéreas têm estrutura diferente de preço em dinheiro. Uma oferta pode combinar milhas, taxa de embarque, tarifa em dinheiro, clube, promoções, classe de serviço e regras específicas do programa. Por isso, o payload de resposta precisa preservar mais contexto do que apenas um número.

Por que usar API pronta em vez de scraping de milhas

Fluxos de milhas costumam ser mais sensíveis do que uma busca simples de passagens. Eles podem depender de APIs mobile, sessão, parâmetros de cabine, regras de passageiros, contexto de ida e volta, combinações de pontos + dinheiro e mudanças frequentes no formato das respostas.

Quando uma equipe tenta manter scraping próprio, os problemas aparecem rápido:

  • alto custo de browser automation
  • mudança frequente de layout e chamadas internas
  • dados de pontos e taxas espalhados em estruturas diferentes
  • dificuldade para normalizar voos, horários, trechos e opções tarifárias
  • retries e timeouts longos em fluxos de disponibilidade
  • bloqueios ou respostas inconsistentes quando há escala
  • pouco controle de logs, rastreabilidade e observabilidade

Com uma API pronta, sua aplicação trabalha com parâmetros do domínio de viagem: origem, destino, data, retorno, passageiros e modo de preço. A GeckoAPI cuida da coleta e da normalização para JSON.

Se você está comparando arquitetura, vale ler também o guia Web Scraping vs API Pronta.

Endpoint Smiles: consultar ofertas em milhas

O endpoint de Smiles na GeckoAPI usa:

{
  "target": "smiles.com.br",
  "type": "plp"
}

Ele foi desenhado para buscas de passagens na Smiles por origem, destino, datas e passageiros. A resposta normalizada traz offers[], cheapestOffer, fareOptions[], quantidade de milhas, taxas, companhia, cabine, paradas, horários e aeroportos.

Esse endpoint não é uma API de emissão, reserva, login, compra de milhas ou transferência. O foco é consulta estruturada de ofertas de passagens para alimentar sistemas de monitoramento, comparação e análise.

Para ver o contrato completo, acesse a documentação técnica do endpoint smiles.com.br:plp ou a landing da API para Smiles.

Exemplo de chamada Smiles ida e volta

curl -X POST \
  -H "Authorization: Bearer SUA_CHAVE" \
  -H "Content-Type: application/json" \
  -d '{
    "target": "smiles.com.br",
    "type": "plp",
    "from": "GRU",
    "to": "GIG",
    "departureDate": "2026-08-15",
    "returnDate": "2026-08-22",
    "numAdults": 1,
    "numChildren": 0,
    "numInfants": 0
  }' \
  https://api.geckoapi.com.br/v1/extract

Esse request consulta ofertas de ida e volta da Smiles entre Guarulhos (GRU) e Rio de Janeiro/Galeão (GIG). Para busca somente ida, basta omitir returnDate.

Em algumas execuções, esse endpoint pode levar até 1 minuto para responder. Isso é esperado em fluxos de disponibilidade de passagens; sua aplicação deve aguardar a conclusão e salvar requestId e executionId para rastreabilidade.

Campos de entrada da API Smiles

CampoObrigatórioO que representa
targetSimSempre smiles.com.br
typeSimSempre plp para busca de passagens
fromSimCódigo IATA do aeroporto de origem, como GRU, CGH, BSB ou CNF
toSimCódigo IATA do aeroporto de destino, como GIG, SDU, REC ou SSA
departureDateSimData de ida no formato YYYY-MM-DD
returnDateNãoData de volta no formato YYYY-MM-DD; quando omitida, a busca é somente ida
numAdultsNãoQuantidade de adultos, padrão 1
numChildrenNãoQuantidade de crianças, padrão 0
numInfantsNãoQuantidade de bebês de colo, padrão 0
urlNão suportadoA busca Smiles usa campos estruturados; não envie URL manual

Exemplo de resposta Smiles

Uma resposta simplificada da API Smiles pode ter este formato:

{
  "requestId": "99999999-1111-4111-8111-999999999999",
  "executionId": "99999999-2222-4222-8222-999999999999",
  "data": {
    "source": "smiles.com.br",
    "type": "plp",
    "parser": "smiles_flightsearch_json_api",
    "searchType": "ROUND_TRIP",
    "from": "GRU",
    "to": "GIG",
    "departureDate": "2026-08-15",
    "returnDate": "2026-08-22",
    "numAdults": 1,
    "numChildren": 0,
    "numInfants": 0,
    "cabin": "ALL",
    "totalOffers": 2,
    "listedOffers": 2,
    "cheapestOffer": {
      "position": 1,
      "fareType": "SMILES_CLUB",
      "airline": "G3",
      "cabin": "ECONOMIC",
      "stops": 0,
      "departureAirport": "GRU",
      "departureTime": "2026-08-15T09:00:00",
      "arrivalAirport": "GIG",
      "arrivalTime": "2026-08-15T10:10:00",
      "priceHint": 12500,
      "fareOptions": [
        {
          "fareType": "SMILES_CLUB",
          "miles": 12500,
          "money": 0,
          "costTax": 39.9,
          "productClass": "PROMO"
        }
      ]
    },
    "offers": [
      {
        "position": 1,
        "fareType": "SMILES_CLUB",
        "airline": "G3",
        "stops": 0,
        "priceHint": 12500,
        "fareOptions": [
          {
            "miles": 12500,
            "money": 0,
            "costTax": 39.9
          }
        ]
      }
    ]
  }
}

Para alertas de milhas, normalmente você vai olhar para:

  • data.cheapestOffer.priceHint: valor numérico usado para ordenar por menor oferta em pontos
  • data.cheapestOffer.fareOptions[].miles: quantidade de milhas/pontos
  • data.cheapestOffer.fareOptions[].costTax: taxa associada à oferta
  • data.offers[].airline: companhia ou fonte da oferta
  • data.offers[].stops: quantidade de paradas
  • data.offers[].departureTime e data.offers[].arrivalTime: horários da opção

Endpoint Azul Pontos/TudoAzul: consultar voos com points: true

Para Azul, a GeckoAPI usa o mesmo endpoint técnico das buscas de voos:

{
  "target": "voeazul.com.br",
  "type": "plp"
}

A diferença para o cenário de Azul Pontos ou TudoAzul é o campo:

{
  "points": true
}

Quando points: true, a busca retorna o modo de preço em pontos quando a Azul disponibiliza essas opções. A resposta inclui pricingMode: "points", pointsOptions[], menor quantidade de pontos e componentes em dinheiro como taxas, conveniência ou total adicional quando retornados.

Para o contrato completo, acesse a documentação técnica do endpoint voeazul.com.br:plp ou a landing da API para Azul.

Exemplo de chamada Azul Pontos

curl -X POST \
  -H "Authorization: Bearer SUA_CHAVE" \
  -H "Content-Type: application/json" \
  -d '{
    "target": "voeazul.com.br",
    "type": "plp",
    "from": "CNF",
    "to": "VCP",
    "departureDate": "2026-08-15",
    "numAdults": 1,
    "numChildren": 0,
    "numInfants": 0,
    "currency": "BRL",
    "points": true
  }' \
  https://api.geckoapi.com.br/v1/extract

Esse request consulta uma busca de pontos da Azul saindo de Belo Horizonte/Confins (CNF) para Campinas/Viracopos (VCP). O mesmo formato aceita returnDate para ida e volta.

Campos de entrada da API Azul Pontos

CampoObrigatórioO que representa
targetSimSempre voeazul.com.br
typeSimSempre plp para busca de voos
fromSimCódigo IATA do aeroporto de origem, como CNF, VCP, GRU ou REC
toSimCódigo IATA do aeroporto de destino, como VCP, CNF, SSA ou FOR
departureDateSimData de ida no formato YYYY-MM-DD
returnDateNãoData de volta no formato YYYY-MM-DD
numAdultsNãoQuantidade de adultos, padrão 1
numChildrenNãoQuantidade de crianças, padrão 0
numInfantsNãoQuantidade de bebês, padrão 0
currencyNãoMoeda ISO 4217 usada para componentes em dinheiro, padrão BRL
pointsNãoEnvie true para consultar opções em pontos TudoAzul
urlNão suportadoA API Azul usa campos estruturados; não envie URL manual

Exemplo de resposta Azul Pontos

Uma resposta simplificada em modo de pontos pode ter este formato:

{
  "requestId": "99999999-1111-4111-8111-999999999999",
  "executionId": "99999999-2222-4222-8222-999999999999",
  "data": {
    "source": "voeazul.com.br",
    "type": "plp",
    "parser": "azul_availability_json_api",
    "searchType": "ONE_WAY",
    "pricingMode": "points",
    "from": "CNF",
    "to": "VCP",
    "departureDate": "2026-08-15",
    "returnDate": "",
    "numAdults": 1,
    "numChildren": 0,
    "numInfants": 0,
    "currency": "BRL",
    "trips": [
      {
        "origin": "CNF",
        "destination": "VCP",
        "fareInformation": {
          "lowestPoints": 8200,
          "highestPoints": 21400
        },
        "journeys": [
          {
            "origin": "CNF",
            "destination": "VCP",
            "departure": "2026-08-15T10:00:00.000Z",
            "arrival": "2026-08-15T11:15:00.000Z",
            "stopsCount": 0,
            "duration": "PT1H15M",
            "fares": [
              {
                "productClass": {
                  "code": "AZUL",
                  "category": "ECONOMY",
                  "name": "Azul"
                },
                "lowestFare": true,
                "pointsOptions": [
                  {
                    "passengerType": "ADT",
                    "amountLevel": 1,
                    "points": 8200,
                    "discountedPoints": 8200,
                    "taxesAndFees": {
                      "amount": 39.9,
                      "currency": "BRL"
                    },
                    "totalMoney": {
                      "amount": 39.9,
                      "currency": "BRL"
                    }
                  }
                ]
              }
            ]
          }
        ]
      }
    ],
    "flexibleDays": [
      {
        "origin": "CNF",
        "destination": "VCP",
        "lowestFares": [
          {
            "date": "2026-08-15",
            "totalLowFarePoints": 8200
          }
        ]
      }
    ]
  }
}

Para monitoramento de TudoAzul, os campos mais úteis costumam ser:

  • data.pricingMode: indica se a consulta foi resolvida em points ou cash
  • data.trips[].fareInformation.lowestPoints: menor quantidade de pontos encontrada na viagem
  • data.trips[].journeys[].fares[].pointsOptions[].points: quantidade de pontos antes de descontos
  • data.trips[].journeys[].fares[].pointsOptions[].discountedPoints: pontos após desconto quando houver
  • data.trips[].journeys[].fares[].pointsOptions[].taxesAndFees: taxas em dinheiro
  • data.flexibleDays[].lowestFares[].totalLowFarePoints: menor oferta de pontos no calendário flexível quando retornada

Smiles vs Azul Pontos: quando usar cada endpoint

Os dois endpoints resolvem buscas de milhas aéreas, mas respondem a perguntas diferentes.

Use Smiles quando seu produto precisa acompanhar ofertas publicadas pela Smiles, com milhas, taxas, companhia, cabine, paradas e horários. É o caminho natural para alertas e comparadores focados em resgates Smiles.

Use Azul Pontos/TudoAzul quando seu produto precisa consultar disponibilidade da Azul em modo de pontos, com jornadas, segmentos, famílias tarifárias, opções de pontos e calendário flexível.

Em uma arquitetura de metabusca ou BI, o ideal é salvar os dois resultados em um modelo interno comum:

DimensãoSmilesAzul Pontos
Fontesmiles.com.brvoeazul.com.br
Modo de preçoMilhas/pontos por ofertapoints: true e pricingMode: "points"
Menor ofertacheapestOffer.priceHintfareInformation.lowestPoints ou totalLowFarePoints
TaxasfareOptions[].costTaxpointsOptions[].taxesAndFees
Opçõesoffers[]trips[].journeys[].fares[]
Melhor paraOfertas Smiles e alertas por programaBusca Azul/TudoAzul por rota, data e calendário flexível

Como modelar alertas de milhas aéreas

Uma implementação simples de alerta pode seguir este fluxo:

  1. Defina as rotas monitoradas, como GRU -> GIG, CNF -> VCP ou BSB -> REC.
  2. Gere uma lista de datas futuras e composições de passageiros.
  3. Execute chamadas para Smiles e Azul Pontos em uma rotina programada.
  4. Normalize o resultado em uma tabela própria com fonte, rota, data, pontos, taxas, horário, paradas e executionId.
  5. Compare a menor oferta atual com o histórico.
  6. Dispare alerta quando a oferta cair abaixo do limite configurado.

Um registro interno pode ficar assim:

{
  "source": "smiles.com.br",
  "from": "GRU",
  "to": "GIG",
  "departureDate": "2026-08-15",
  "points": 12500,
  "taxAmount": 39.9,
  "currency": "BRL",
  "stops": 0,
  "departureTime": "2026-08-15T09:00:00",
  "providerOfferId": "flight-uid-1",
  "executionId": "99999999-2222-4222-8222-999999999999",
  "capturedAt": "2026-06-30T12:00:00.000Z"
}

Esse modelo não precisa ser igual à resposta original. Ele serve para comparar fontes diferentes em uma camada comum, enquanto você preserva o JSON bruto para auditoria e reprocessamento.

Boas práticas para integrar uma API de milhas

Ao colocar uma API de milhas aéreas em produção, vale tratar a integração como um pipeline de dados:

  • salve requestId e executionId em todas as consultas
  • normalize aeroportos em IATA de 3 letras
  • mantenha datas em YYYY-MM-DD
  • separe pontos de componentes em dinheiro
  • trate taxa como parte importante da comparação, não como detalhe
  • diferencie ida, volta e trechos com conexão
  • use retries com intervalo, sem martelar a mesma busca
  • registre quando uma fonte retorna zero oferta
  • compare menor oferta por rota, data, fonte e passageiros
  • evite acoplar o produto final a uma estrutura específica de uma companhia

Também é importante lembrar que esses endpoints são de consulta de dados. Eles não emitem passagem, não transferem pontos, não fazem login em conta de cliente e não substituem regras comerciais dos programas de fidelidade.

Casos de uso para API de milhas aéreas

Uma API para milhas aéreas pode sustentar vários produtos e rotinas:

  • alertas de oportunidade: avisar quando uma rota fica abaixo de 10.000, 15.000 ou 20.000 pontos
  • metabusca de viagem: comparar diferentes fontes em uma mesma experiência
  • BI de aviação: analisar disponibilidade por aeroporto, antecedência e companhia
  • agentes de IA: responder perguntas como “qual a melhor data para resgatar CNF-VCP em pontos?”
  • backoffice de agência: reduzir consulta manual de operadores
  • ETL de preços: salvar séries históricas para análise de tendência
  • regras de recomendação: combinar pontos, taxas, duração e paradas em um score próprio

Para ampliar a cobertura além de Smiles e Azul Pontos, veja também os guias de API LATAM Passagens Aéreas, API Azul Passagens Aéreas, API GOL Passagens Aéreas e a página de API de Passagens Aéreas.

FAQ

Existe API para milhas aéreas?

Sim. Na GeckoAPI, você pode consultar ofertas de milhas aéreas e pontos usando endpoints como smiles.com.br:plp e voeazul.com.br:plp com points: true.

Qual endpoint usar para Smiles?

Use POST https://api.geckoapi.com.br/v1/extract com target: "smiles.com.br" e type: "plp". Informe from, to, departureDate, returnDate opcional e passageiros.

Qual endpoint usar para Azul Pontos ou TudoAzul?

Use POST https://api.geckoapi.com.br/v1/extract com target: "voeazul.com.br", type: "plp" e points: true. Informe origem, destino, data, passageiros e currency opcional.

A API retorna taxas além dos pontos?

Sim. Na Smiles, as taxas aparecem em campos como fareOptions[].costTax. Na Azul Pontos, campos como pointsOptions[].taxesAndFees e pointsOptions[].totalMoney representam componentes em dinheiro quando retornados.

A API emite passagem com milhas?

Não. Os endpoints descritos aqui são para consulta e extração estruturada de dados. Eles não emitem, reservam, pagam, transferem milhas ou fazem login em contas de programas de fidelidade.

Posso usar para criar alerta de milhas baratas?

Sim. Esse é um dos usos mais comuns: consultar rotas e datas recorrentes, salvar a menor oferta em pontos, comparar com histórico e disparar alertas quando o preço cair abaixo de um limite definido.

Próximo passo

Para começar, acesse a API para Smiles, a API para Azul, a documentação de smiles.com.br:plp e a documentação de voeazul.com.br:plp.

Quer testar uma API para milhas aéreas? Crie sua conta em dashboard.geckoapi.com.br e comece a consultar Smiles e Azul Pontos em JSON estruturado.

Quer testar?

Acesse o dashboard e ganhe 100 créditos grátis para começar. Sem cartão de crédito.

Criar conta grátis