Formato da resposta (responseFormat)
O campo opcional responseFormat, no corpo da requisição, define o que cada item de results carrega.
| Valor | Campo retornado | Conteúdo |
|---|---|---|
RAW | data | Resposta original e bruta da API da companhia (padrão) |
PARSED | flights | Modelo normalizado da Economilha, idêntico para todos os programas |
- Omitir
responseFormatequivale aRAW. Integrações existentes continuam funcionando exatamente como hoje, sem nenhuma alteração. - Os dois formatos são mutuamente exclusivos: em
PARSEDo campodatanão é retornado, e emRAWo campoflightsnão é retornado. Não existe um formato que devolva ambos. - O consumo de quota é idêntico nos dois formatos: 1 unidade por companhia solicitada.
Por que usar PARSED
Com RAW, cada cliente precisa escrever e manter um parser por programa de fidelidade — e acompanhar toda mudança que as companhias fizerem nas suas APIs. Com PARSED, esse trabalho fica do lado da Economilha: todos os programas devolvem a mesma estrutura, e mudanças no formato dos provedores são absorvidas por nós, sem alteração no contrato desta API.
Como bônus, a resposta em PARSED é muito menor, já que o payload bruto da companhia não é transmitido.
Response 200 OK (formato PARSED)
{
"results": [
{
"airline": "LATAM",
"success": true,
"flights": [
{
"id": "ba2b7811-9117-4825-a0aa-3d7ea50997a0",
"airlineLoyalty": "LATAM",
"origin": "POA",
"destination": "MAD",
"departureDate": "2026-11-22T19:40:00",
"arrivalDate": "2026-11-23T13:35:00",
"cabinType": "ECONOMY",
"tripType": "ONE_WAY",
"direction": "OUTBOUND",
"stops": 1,
"durationMinutes": 835,
"flightCode": "LA3987",
"availableSeats": null,
"equipment": "789",
"fareSource": null,
"fares": [
{
"fareType": "LATAM_LIGHT",
"miles": 82104,
"money": 0.0,
"taxes": 111.67,
"fees": 0.0,
"totalMoney": 111.67,
"baseMiles": null,
"classOfService": null,
"productClass": "LIGHT"
}
],
"legs": [
{
"airlineCode": "LA",
"flightNumber": "3987",
"cabinType": "ECONOMY",
"departureAirport": "POA",
"arrivalAirport": "GRU",
"departureDate": "2026-11-22T19:40:00",
"arrivalDate": "2026-11-22T21:30:00",
"equipment": "320",
"classOfService": null,
"durationMinutes": 110,
"isConnection": false
},
{
"airlineCode": "LA",
"flightNumber": "8066",
"cabinType": "ECONOMY",
"departureAirport": "GRU",
"arrivalAirport": "MAD",
"departureDate": "2026-11-22T23:35:00",
"arrivalDate": "2026-11-23T13:35:00",
"equipment": "789",
"classOfService": null,
"durationMinutes": 600,
"isConnection": true
}
]
}
]
},
{
"airline": "AZUL",
"success": false,
"error": {
"message": "Failed to fetch data from AZUL",
"providerStatusCode": 503
},
"flights": null
}
],
"summary": {
"totalAirlinesRequested": 2,
"successfulSearches": 1,
"failedSearches": 1
}
}Estrutura de cada item em results (formato PARSED)
| Campo | Tipo | Descrição |
|---|---|---|
airline | string | Programa/companhia |
success | boolean | true se a busca na companhia foi bem-sucedida |
flights | array | Voos normalizados. [] quando não há disponibilidade; null em caso de erro |
error | object | Presente apenas quando success = false |
parseError | object | Presente apenas quando a busca funcionou mas o tratamento do dado falhou |
flights: [] significa nenhum voo disponível para a busca. flights: null significa que
nenhum dado foi obtido — verifique error (falha na companhia) ou parseError (falha no
tratamento).
Objeto flights[]
| Campo | Tipo | Descrição |
|---|---|---|
id | string | Identificador do voo válido apenas dentro desta resposta. Não é estável entre chamadas nem serve para reserva. Use-o para deduplicar ou como chave de lista. |
airlineLoyalty | string | Programa/companhia do voo |
origin | string | IATA da origem do trecho |
destination | string | IATA do destino do trecho |
departureDate | string | Data/hora da partida — hora local do aeroporto (ver atenção abaixo) |
arrivalDate | string | Data/hora da chegada — hora local do aeroporto |
cabinType | string | ECONOMY ou BUSINESS |
tripType | string | ONE_WAY ou ROUND_TRIP (o tipo da busca) |
direction | string | OUTBOUND (ida) ou RETURN (volta) |
stops | int | Número de paradas |
durationMinutes | int | Duração total do trecho em minutos |
flightCode | string | Código do voo principal (ex: LA3987) |
availableSeats | int | Assentos disponíveis. null quando a companhia não informa |
equipment | string | Modelo da aeronave. null quando a companhia não informa |
fareSource | string | AWARD ou COMERCIAL. null na maioria dos programas |
fares | array | Opções de preço do voo (ver abaixo). Sempre com ao menos 1 item |
legs | array | Trechos operados do voo (ver abaixo). Sempre com ao menos 1 item |
Objeto fares[]
| Campo | Tipo | Descrição |
|---|---|---|
fareType | string | Tipo da tarifa no programa (ex: LATAM_LIGHT, SMILES_CLUB) |
miles | int | Milhas/pontos necessários. 0 em tarifas pagas em dinheiro |
money | float | Valor em dinheiro da tarifa (fora taxas) |
taxes | float | Taxas |
fees | float | Tarifas adicionais |
totalMoney | float | Total a pagar em dinheiro (money + taxes + fees) |
baseMiles | int | Milhas antes de bônus/descontos, quando a companhia informa |
classOfService | string | Classe tarifária (ex: O), quando a companhia informa |
productClass | string | Nome comercial da tarifa (ex: LIGHT), quando a companhia informa |
Objeto legs[]
| Campo | Tipo | Descrição |
|---|---|---|
airlineCode | string | Código IATA da companhia que opera o trecho |
flightNumber | string | Número do voo |
cabinType | string | Cabine do trecho |
departureAirport | string | IATA do aeroporto de partida |
arrivalAirport | string | IATA do aeroporto de chegada |
departureDate | string | Partida — hora local do aeroporto |
arrivalDate | string | Chegada — hora local do aeroporto |
equipment | string | Modelo da aeronave |
classOfService | string | Classe tarifária do trecho |
durationMinutes | int | Duração do trecho em minutos |
isConnection | boolean | true quando o trecho é uma conexão (não é o primeiro) |
Objeto parseError
| Campo | Tipo | Descrição |
|---|---|---|
message | string | Descrição legível da falha |
Quando a busca na companhia funciona mas o tratamento do dado falha, o item vem com success: true, flights: null e parseError preenchido. Nesse caso, repetir a mesma busca com responseFormat: "RAW" devolve o payload bruto da companhia.
Dois pontos de atenção
1. Datas e horários são hora local do aeroporto, sem fuso.
Os campos departureDate e arrivalDate (tanto do voo quanto dos trechos) vêm no formato
YYYY-MM-DDTHH:mm:ss, sem offset de fuso horário. O valor é o horário do relógio no
aeroporto correspondente, exatamente como a companhia informa. Não interprete esses valores como
UTC nem aplique conversão de fuso.
2. Em ROUND_TRIP, ida e volta vêm como itens separados.
A lista flights é plana: os voos de ida (direction: "OUTBOUND") e de volta
(direction: "RETURN") aparecem como itens independentes, sem pareamento. A API não devolve
combinações ida+volta já precificadas. Se o seu produto precisa exibir o preço da viagem
completa, a combinação e a soma são responsabilidade do cliente — e, em alguns programas, o preço
real da combinação pode diferir da soma das duas pontas.