Exemplos completos
Todos os exemplos usam https://api.economilha.com. Substitua sua-api-key-aqui pela sua chave.
1. Busca somente ida (ONE_WAY)
curl -X POST https://api.economilha.com/flights/search \
-H "Content-Type: application/json" \
-H "Accept: application/vnd.economilha.v1+json" \
-H "x-api-key: sua-api-key-aqui" \
-d '{
"airlineLoyalty": ["SMILES"],
"tripType": "ONE_WAY",
"cabinType": "ECONOMY",
"origin": "GRU",
"destination": "REC",
"departureDate": "2026-03-15",
"passengers": {
"adults": 1,
"children": 0,
"infants": 0
}
}'Response 200 OK:
{
"results": [
{
"airline": "SMILES",
"success": true,
"data": { ... }
}
],
"summary": {
"totalAirlinesRequested": 1,
"successfulSearches": 1,
"failedSearches": 0
}
}2. Ida e volta em múltiplas companhias (ROUND_TRIP)
curl -X POST https://api.economilha.com/flights/search \
-H "Content-Type: application/json" \
-H "Accept: application/vnd.economilha.v1+json" \
-H "x-api-key: sua-api-key-aqui" \
-d '{
"airlineLoyalty": ["SMILES", "LATAM", "AZUL"],
"tripType": "ROUND_TRIP",
"cabinType": "ECONOMY",
"origin": "GRU",
"destination": "MIA",
"departureDate": "2026-04-10",
"returnDate": "2026-04-25",
"passengers": {
"adults": 2,
"children": 1,
"infants": 0
}
}'Response 200 OK:
{
"results": [
{
"airline": "SMILES",
"success": true,
"data": { ... }
},
{
"airline": "LATAM",
"success": true,
"data": {
"outbound": { ... },
"inbound": { ... },
"selectedOutboundOfferId": "offer-123"
}
},
{
"airline": "AZUL",
"success": true,
"data": { ... }
}
],
"summary": {
"totalAirlinesRequested": 3,
"successfulSearches": 3,
"failedSearches": 0
}
}Esta chamada consome 3 unidades de quota — uma por companhia solicitada — e só responde quando a mais lenta das três terminar. Para telas com usuário esperando, dispare três requisições de um programa cada, em paralelo: mesma quota, primeiros resultados em segundos. Ver Uma requisição por programa.
3. Busca em dinheiro (CASH)
curl -X POST https://api.economilha.com/flights/search \
-H "Content-Type: application/json" \
-H "Accept: application/vnd.economilha.v1+json" \
-H "x-api-key: sua-api-key-aqui" \
-d '{
"airlineLoyalty": ["LATAM", "AZUL", "GOL"],
"tripType": "ONE_WAY",
"cabinType": "ECONOMY",
"origin": "GRU",
"destination": "REC",
"departureDate": "2026-04-10",
"passengers": {
"adults": 1,
"children": 0,
"infants": 0
},
"priceType": "CASH"
}'Response 200 OK:
{
"results": [
{
"airline": "LATAM",
"success": true,
"data": {
"outbound": { ... },
"inbound": null
}
},
{
"airline": "AZUL",
"success": true,
"data": { ... }
},
{
"airline": "GOL",
"success": true,
"data": {
"outbound": { ... },
"inbound": null
}
}
],
"summary": {
"totalAirlinesRequested": 3,
"successfulSearches": 3,
"failedSearches": 0
}
}O conteúdo de data para buscas em dinheiro é a resposta original e bruta da API de cada companhia.
4. Dados já tratados (responseFormat = PARSED)
curl -X POST https://api.economilha.com/flights/search \
-H "Content-Type: application/json" \
-H "Accept: application/vnd.economilha.v1+json" \
-H "x-api-key: sua-api-key-aqui" \
-d '{
"airlineLoyalty": ["LATAM", "SMILES"],
"tripType": "ONE_WAY",
"cabinType": "ECONOMY",
"origin": "GRU",
"destination": "MIA",
"departureDate": "2026-04-10",
"passengers": {
"adults": 1,
"children": 0,
"infants": 0
},
"responseFormat": "PARSED"
}'Response 200 OK:
{
"results": [
{
"airline": "LATAM",
"success": true,
"flights": [
{
"id": "ba2b7811-9117-4825-a0aa-3d7ea50997a0",
"airlineLoyalty": "LATAM",
"origin": "GRU",
"destination": "MIA",
"departureDate": "2026-04-10T22:15:00",
"arrivalDate": "2026-04-11T06:30:00",
"cabinType": "ECONOMY",
"tripType": "ONE_WAY",
"direction": "OUTBOUND",
"stops": 0,
"durationMinutes": 495,
"flightCode": "LA8084",
"availableSeats": null,
"equipment": "789",
"fareSource": null,
"fares": [
{
"fareType": "LATAM_LIGHT",
"miles": 45000,
"money": 0.0,
"taxes": 210.5,
"fees": 0.0,
"totalMoney": 210.5,
"baseMiles": null,
"classOfService": null,
"productClass": "LIGHT"
}
],
"legs": [
{
"airlineCode": "LA",
"flightNumber": "8084",
"cabinType": "ECONOMY",
"departureAirport": "GRU",
"arrivalAirport": "MIA",
"departureDate": "2026-04-10T22:15:00",
"arrivalDate": "2026-04-11T06:30:00",
"equipment": "789",
"classOfService": null,
"durationMinutes": 495,
"isConnection": false
}
]
}
]
},
{
"airline": "SMILES",
"success": true,
"flights": []
}
],
"summary": {
"totalAirlinesRequested": 2,
"successfulSearches": 2,
"failedSearches": 0
}
}Note que SMILES retornou flights: [] — a busca funcionou, mas não há disponibilidade. Isso é
diferente de flights: null, que indica falha.
5. Consultar quota
curl -X GET https://api.economilha.com/quota \
-H "Accept: application/vnd.economilha.v1+json" \
-H "x-api-key: sua-api-key-aqui"Response 200 OK:
{
"limit": 1000,
"consumed": 45,
"remaining": 955,
"usageByCompany": [
{
"airlineLoyalty": "SMILES",
"consumed": 20
},
{
"airlineLoyalty": "LATAM",
"consumed": 15
},
{
"airlineLoyalty": "AZUL",
"consumed": 10
}
]
}6. Erro de validação
Request sem o campo obrigatório origin:
curl -X POST https://api.economilha.com/flights/search \
-H "Content-Type: application/json" \
-H "x-api-key: sua-api-key-aqui" \
-d '{
"airlineLoyalty": ["SMILES"],
"tripType": "ONE_WAY",
"cabinType": "ECONOMY",
"destination": "REC",
"departureDate": "2026-03-15",
"passengers": { "adults": 1 }
}'Response 422 Unprocessable Entity:
{
"error": {
"code": "VALIDATION_ERROR",
"message": "Request validation failed",
"details": {
"errors": [
{
"field": "body -> origin",
"message": "Field required",
"type": "missing"
}
]
},
"correlationId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
}
}7. API Key ausente
Response 401 Unauthorized:
{
"error": {
"code": "HTTP_ERROR",
"message": "API key is required. Please provide a valid x-api-key header.",
"correlationId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
}
}8. Quota insuficiente
Response 402 Payment Required:
{
"error": {
"code": "HTTP_ERROR",
"message": "Insufficient quota. Required: 3, please check your remaining quota.",
"correlationId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
}
}9. Media type não suportado
curl -X GET https://api.economilha.com/quota \
-H "Accept: application/xml" \
-H "x-api-key: sua-api-key-aqui"Response 406 Not Acceptable:
{
"error": {
"code": "NOT_ACCEPTABLE",
"message": "The requested media type is not supported",
"supportedMediaTypes": [
"application/vnd.economilha.v1+json",
"application/json"
]
}
}