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 DashboardSe 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 endpointtarget: "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
| Campo | Obrigatório | O que representa |
|---|---|---|
target | Sim | Sempre smiles.com.br |
type | Sim | Sempre plp para busca de passagens |
from | Sim | Código IATA do aeroporto de origem, como GRU, CGH, BSB ou CNF |
to | Sim | Código IATA do aeroporto de destino, como GIG, SDU, REC ou SSA |
departureDate | Sim | Data de ida no formato YYYY-MM-DD |
returnDate | Não | Data de volta no formato YYYY-MM-DD; quando omitida, a busca é somente ida |
numAdults | Não | Quantidade de adultos, padrão 1 |
numChildren | Não | Quantidade de crianças, padrão 0 |
numInfants | Não | Quantidade de bebês de colo, padrão 0 |
url | Não suportado | A 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 pontosdata.cheapestOffer.fareOptions[].miles: quantidade de milhas/pontosdata.cheapestOffer.fareOptions[].costTax: taxa associada à ofertadata.offers[].airline: companhia ou fonte da ofertadata.offers[].stops: quantidade de paradasdata.offers[].departureTimeedata.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
| Campo | Obrigatório | O que representa |
|---|---|---|
target | Sim | Sempre voeazul.com.br |
type | Sim | Sempre plp para busca de voos |
from | Sim | Código IATA do aeroporto de origem, como CNF, VCP, GRU ou REC |
to | Sim | Código IATA do aeroporto de destino, como VCP, CNF, SSA ou FOR |
departureDate | Sim | Data de ida no formato YYYY-MM-DD |
returnDate | Não | Data de volta no formato YYYY-MM-DD |
numAdults | Não | Quantidade de adultos, padrão 1 |
numChildren | Não | Quantidade de crianças, padrão 0 |
numInfants | Não | Quantidade de bebês, padrão 0 |
currency | Não | Moeda ISO 4217 usada para componentes em dinheiro, padrão BRL |
points | Não | Envie true para consultar opções em pontos TudoAzul |
url | Não suportado | A 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 empointsoucashdata.trips[].fareInformation.lowestPoints: menor quantidade de pontos encontrada na viagemdata.trips[].journeys[].fares[].pointsOptions[].points: quantidade de pontos antes de descontosdata.trips[].journeys[].fares[].pointsOptions[].discountedPoints: pontos após desconto quando houverdata.trips[].journeys[].fares[].pointsOptions[].taxesAndFees: taxas em dinheirodata.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ão | Smiles | Azul Pontos |
|---|---|---|
| Fonte | smiles.com.br | voeazul.com.br |
| Modo de preço | Milhas/pontos por oferta | points: true e pricingMode: "points" |
| Menor oferta | cheapestOffer.priceHint | fareInformation.lowestPoints ou totalLowFarePoints |
| Taxas | fareOptions[].costTax | pointsOptions[].taxesAndFees |
| Opções | offers[] | trips[].journeys[].fares[] |
| Melhor para | Ofertas Smiles e alertas por programa | Busca 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:
- Defina as rotas monitoradas, como
GRU -> GIG,CNF -> VCPouBSB -> REC. - Gere uma lista de datas futuras e composições de passageiros.
- Execute chamadas para Smiles e Azul Pontos em uma rotina programada.
- Normalize o resultado em uma tabela própria com fonte, rota, data, pontos, taxas, horário, paradas e
executionId. - Compare a menor oferta atual com o histórico.
- 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
requestIdeexecutionIdem 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