QuickStart - TripApi
Vamos iniciar com a sua primeira integração com o TripApi, para isso vamos precisar completar os seguintes passos:
0️⃣ Mercado de turismo
Caso você não tenha experiência alguma com o mercado de turismo, talvez seja interessante ler estes e-book antes de iniciar a integração:
https://www.envisiontecnologia.com.br/wp-content/uploads/2015/04/MERCADO-DE-TURISMO-EBOOK.pdf
1️⃣ Crie seu conta
Se você ainda não tem uma conta conosco, crie sua conta aqui. Após o rápido processo de setup, lembre-se de copiar o API-KEY gerado.
Caso você já tenha realizado um setup e não tem seu API-KEY em mãos, execute os seguintes passos:
- Efetue o login em sua conta no TripApi clicando aqui
- Acesse o menu Configurações -> Chaves de API

- Click no ícone de copia sua chave de api.
Guarde seu API-KEY com segurança
O API-KEY gerado terá acesso para efetuar reservas e emissões atreladas a sua conta, então, cuide para que ele seja armazenado com segurança. Não o compartilhe áreas publicas, como repositórios no github.
2️⃣ Obtenha um token de acesso
Antes de efetuar sua primeira busca de vôos, você precisa obter um token de acesso. O TripApi expõe suas chamadas via REST, então você poderá fazer o equivalente ao comando cURL abaixo, em qualquer linguagem de programação capaz de efetuar chamadas HTTP.
Não esqueça de substituir o texto "{{API-KEY}}" pelo API-KEY obtido no passo 1.
curl --location --request POST 'http://authservice.tripapi.com.br/Auth/GenerateToken' \
--header 'Authorization: {{API-KEY}}'
Este request deve retornar a seguinte resposta:
{
"access_token": "xxxxxxxxxxxxnR5cCI6IkpXVCIsImtpZCI6Ik9rLU9sWmVVcnltMlltRG9DVkNsTCJ9.eyJpc3MiOiJodHRwczovL2Rldi1zZmg0Mjg4bnAzN2ZuajVmLnVzLmF1dGgwLmNvbS8iLCJzdWIiOiIwY3J1VEpxQVpiNHNzVXU1VWZVaDZyWVlzcnppaFR1bEBjbGllbnRzIiwiYXVkIjoiUjNWcGJHaGxjbTFsUlc1MmFYTnBiMjVmTWpBeU16QTNNalF4TnpNMV9HVUlMSEVSTUVFTlZJU0lPTl8zOGVlZWQ0MS0xMDUyLTQ4MTUtYjg0Mi02MDA1ZmMzMTI2ZDEiLCJpYXQiOjE2OTI4NzgyMjksImV4cCI6MTY5Mjk2NDYyOSwiYXpwIjoiMGNydVRKcUFaYjRzc1V1NVVmVWg2cllZc3J6aWhUdWwiLCJzY29wZSI6InJlYWQ6bWVzc2FnZXMiLCJndHkiOiJjbGllbnQtY3JlZGVudGlhbHMifQ.cD-N7XF6SQmHypfE-NTUXogEcBqE6E5LmTN2ZCQK2rOv8s3H3_BYErFWCorRyw7nVC852I_0DwN7kjVW04f2FFNc9gCfTNbpQpzrZ1628ZgH50mmwLZTEZrlj0WvRiFUGtr8L5-kZV9pLjO5ihup8YhvQLPSptZI40SDCzEOe9iZ2YYNfM8hdUTXzM-ZfaAkP78JrkD2nXuFYECz3pEpQYGuiQWZ1zFXX8mZhMIl00MTh6aHltvlpblQaMXKbjForEcNbd6XuIVprX4_89vuC6AnLbp4XKAAPRDfxQ-7FfzSnbNGXYOUIV_z9NrJG2nKfMeTewS-a9uuFZmf3CISTg",
"expires_in": 86400,
"token_type": "Bearer"
}
API Reference
Você sempre pode consultar mais detalhes sobre cada método da API, na seção API Reference. Lá, inclusive, você tem acesso a exemplos de chamada em diversas linguagens de programação e documentação completa sobre cada tipo de objeto trafegado
Você também pode executar esta chamada utilizando o guia de utilização do TripApi no Postman acessando a página Postman
3️⃣ Faça sua primeira busca de vôos
Vamos efetuar uma busca do aerporto de GRU (Guarulhos) para o aeroporto de POA (Porto Alegre). As localidades no TripApi Air são orientadas aos seus IATAs. O JSON de request para efetuar uma busca como essa, seria como esse:
{
"airParameters": {
"responseGroupType": "Recommendations",
"cityPairRequests": [
{
"originIATA": "GRU",
"destinationIATA": "POA",
"departureDate": "2023-11-20"
},
{
"originIATA": "POA",
"destinationIATA": "GRU",
"departureDate": "2023-11-25"
}
],
"onlyDirectFlights": false,
"baggageAllowance": "Indifferent"
},
"travellers": [
{
"ageGroup": "Adult",
"age": 0
}
]
}
O comando cURL correspondente para efetuar esta chamada seria (Não esqueça de substituir o access-token obtido no passo 2):
curl --location 'http://tripapi-air.tripapi.com.br/TripAPIAir/Search' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {{access-token}}' \
--data '{
"useShoppingKey": true,
"airParameters": {
"responseGroupType": "Recommendations",
"cityPairRequests": [
{
"originIATA": "SAO",
"destinationIATA": "POA",
"departureDate": "2023-11-20"
},
{
"originIATA": "POA",
"destinationIATA": "SAO",
"departureDate": "2023-11-25"
}
],
"onlyDirectFlights": false,
"baggageAllowance": "Indifferent"
},
"travellers": [
{
"ageGroup": "Adult",
"age": 0
}
]
}'
Que deve retornar um resultado como o abaixo:
{
"airResponseData": {
"priceMatrix": {
"airCompanies": [
{
"airCompanyCode": "",
"cellsByStops": [
{
"price": {
"value": 372070,
"currencyCode": "COP"
},
"numberOfStops": "NonStop"
}
],
"cellsByAirport": [
{
"price": {
"value": 372070,
"currencyCode": "COP"
},
"airportIata": "BOG"
}
]
}
]
},
"flightGroups": [
{
"supplierSystem": "Avianca",
"durationInMinutes": 59,
"flights": [
{
"arrivalAirportId": 0,
"departureAirportId": 0,
"durationInMinutes": 59,
"layoverInMinutes": 0,
"arrivalDateTime": "2023-11-20T11:04:00Z",
"departureDateTime": "2023-11-20T10:05:00Z",
"cabinType": "FirstClass",
"airCompanyCode": "AV",
"flightNumber": "9270",
"classOfService": "",
"aircraftType": "320",
"arrivalAirportIATA": "MDE",
"departureAirportIATA": "BOG"
}
],
"cityPairIndex": 0,
"arrivalTime": "2023-11-20T11:04:00Z",
"departureTime": "2023-11-20T10:05:00Z",
"originIATA": "BOG",
"destinationIATA": "MDE",
"stops": 1,
"loginInformationIdentifier": "1"
},
{
// [Outros FlighGroups]
}
],
"flightsOptions": [
{
"flightGroupIndexes": [
0,
1
],
"flightGroups": [],
"brandedFares": [
{
"faresByFlightGroup": [
{
"baggagesIncluded": 0,
"brandedFareName": "XS",
"fareBasis": "SESB0BR9",
"flightClasses": [
"S"
],
"cabinTypes": [
"Economy"
],
"fareType": "Public",
"supplierSystem": "Avianca",
"agreementCode": "PRIVATE FARE",
"loginInformationIdentifier": "1"
},
{
"baggagesIncluded": 0,
"brandedFareName": "XS",
"fareBasis": "SESB0BR9",
"flightClasses": [
"S"
],
"cabinTypes": [
"Economy"
],
"fareType": "Public",
"supplierSystem": "Avianca",
"agreementCode": "PRIVATE FARE",
"loginInformationIdentifier": "1"
}
],
"brandedFareName": "XS",
"adtAmounts": {
"originalFare": {
"value": 278800,
"currencyCode": "COP"
},
"fare": {
"value": 278800,
"currencyCode": "COP"
},
"taxes": {
"value": 93270,
"currencyCode": "COP"
},
"total": {
"value": 372070,
"currencyCode": "COP"
}
},
"exchangeFlightDetails": [],
"shoppingKey": "eyJmcyI6W3sic2tmcyI6MCwiZiI6eyJleCI6eyJUb2tlbk9mZmVyIjoie1wiT2ZmZXJJZFwiOlwiU1AxRi0xNTIxNjg0Mjk1NDI0OTY4NTk1OS0xXCIsXCJSZXNwb25zZUlkXCI6XCJTUDFGLTE1MjE2ODQyOTU0MjQ5Njg1OTU5XCIsXCJPZmZlckl0ZW1zXCI6W3tcIk9mZmVySXRlbUlkXCI6XCJTUDFGLTE1MjE2ODQyOTU0MjQ5Njg1OTU5LTEtMVwiLFwiQWdlR3JvdXBcIjowfV0sXCJTZXJ2aWNlSWRcIjpudWxsfSJ9LCJiYWdpbiI6MCwiYmZuIjoiWFMiLCJmYiI6IlNFU0IwQlI5IiwiZmMiOlsiUyJdLCJjYWJ0IjpbMl0sIkZhcmVUeXBlIjowLCJzcyI6IkF2aWFuY2EiLCJhYyI6IlBSSVZBVEUgRkFSRSIsIkxvZ2luSW5mb3JtYXRpb25JZGVudGlmaWVyIjoiMSJ9fSx7InNrZnMiOjEsImYiOnsiZXgiOnsiVG9rZW5PZmZlciI6IntcIk9mZmVySWRcIjpcIlNQMUYtMTUyMTY4NDI5NTQyNDk2ODU5NTktMVwiLFwiUmVzcG9uc2VJZFwiOlwiU1AxRi0xNTIxNjg0Mjk1NDI0OTY4NTk1OVwiLFwiT2ZmZXJJdGVtc1wiOlt7XCJPZmZlckl0ZW1JZFwiOlwiU1AxRi0xNTIxNjg0Mjk1NDI0OTY4NTk1OS0xLTFcIixcIkFnZUdyb3VwXCI6MH1dLFwiU2VydmljZUlkXCI6bnVsbH0ifSwiYmFnaW4iOjAsImJmbiI6IlhTIiwiZmIiOiJTRVNCMEJSOSIsImZjIjpbIlMiXSwiY2FidCI6WzJdLCJGYXJlVHlwZSI6MCwic3MiOiJBdmlhbmNhIiwiYWMiOiJQUklWQVRFIEZBUkUiLCJMb2dpbkluZm9ybWF0aW9uSWRlbnRpZmllciI6IjEifX1dLCJpZCI6IjQifQ==",
"loginInformationIdentifier": "1",
"supplierSystemName": "Avianca"
},
{
"faresByFlightGroup": [
{
"baggagesIncluded": 1,
"brandedFareName": "M",
"fareBasis": "SESB2BR9",
"flightClasses": [
"S"
],
"cabinTypes": [
"Economy"
],
"fareType": "Public",
"supplierSystem": "Avianca",
"agreementCode": "PUBLIC FARE",
"loginInformationIdentifier": "1"
},
{
"baggagesIncluded": 1,
"brandedFareName": "M",
"fareBasis": "SESB2BR9",
"flightClasses": [
"S"
],
"cabinTypes": [
"Economy"
],
"fareType": "Public",
"supplierSystem": "Avianca",
"agreementCode": "PUBLIC FARE",
"loginInformationIdentifier": "1"
}
],
"brandedFareName": "M",
"adtAmounts": {
"originalFare": {
"value": 478800,
"currencyCode": "COP"
},
"fare": {
"value": 478800,
"currencyCode": "COP"
},
"taxes": {
"value": 131270,
"currencyCode": "COP"
},
"total": {
"value": 610070,
"currencyCode": "COP"
}
},
"exchangeFlightDetails": [],
"shoppingKey": "eyJmcyI6W3sic2tmcyI6MCwiZiI6eyJleCI6eyJUb2tlbk9mZmVyIjoie1wiT2ZmZXJJZFwiOlwiU1AxRi0xNTIxNjg0Mjk1NDI0OTY4NTk1OS00MDFcIixcIlJlc3BvbnNlSWRcIjpcIlNQMUYtMTUyMTY4NDI5NTQyNDk2ODU5NTlcIixcIk9mZmVySXRlbXNcIjpbe1wiT2ZmZXJJdGVtSWRcIjpcIlNQMUYtMTUyMTY4NDI5NTQyNDk2ODU5NTktNDAxLTFcIixcIkFnZUdyb3VwXCI6MH1dLFwiU2VydmljZUlkXCI6bnVsbH0ifSwiYmFnaW4iOjEsImJmbiI6Ik0iLCJmYiI6IlNFU0IyQlI5IiwiZmMiOlsiUyJdLCJjYWJ0IjpbMl0sIkZhcmVUeXBlIjowLCJzcyI6IkF2aWFuY2EiLCJhYyI6IlBVQkxJQyBGQVJFIiwiTG9naW5JbmZvcm1hdGlvbklkZW50aWZpZXIiOiIxIn19LHsic2tmcyI6MSwiZiI6eyJleCI6eyJUb2tlbk9mZmVyIjoie1wiT2ZmZXJJZFwiOlwiU1AxRi0xNTIxNjg0Mjk1NDI0OTY4NTk1OS00MDFcIixcIlJlc3BvbnNlSWRcIjpcIlNQMUYtMTUyMTY4NDI5NTQyNDk2ODU5NTlcIixcIk9mZmVySXRlbXNcIjpbe1wiT2ZmZXJJdGVtSWRcIjpcIlNQMUYtMTUyMTY4NDI5NTQyNDk2ODU5NTktNDAxLTFcIixcIkFnZUdyb3VwXCI6MH1dLFwiU2VydmljZUlkXCI6bnVsbH0ifSwiYmFnaW4iOjEsImJmbiI6Ik0iLCJmYiI6IlNFU0IyQlI5IiwiZmMiOlsiUyJdLCJjYWJ0IjpbMl0sIkZhcmVUeXBlIjowLCJzcyI6IkF2aWFuY2EiLCJhYyI6IlBVQkxJQyBGQVJFIiwiTG9naW5JbmZvcm1hdGlvbklkZW50aWZpZXIiOiIxIn19XSwiaWQiOiI0In0=",
"loginInformationIdentifier": "1",
"supplierSystemName": "Avianca"
},
{
"faresByFlightGroup": [
{
"baggagesIncluded": 1,
"brandedFareName": "L",
"fareBasis": "SESB3BR9",
"flightClasses": [
"S"
],
"cabinTypes": [
"Economy"
],
"fareType": "Public",
"supplierSystem": "Avianca",
"agreementCode": "PUBLIC FARE",
"loginInformationIdentifier": "1"
},
{
"baggagesIncluded": 1,
"brandedFareName": "L",
"fareBasis": "SESB3BR9",
"flightClasses": [
"S"
],
"cabinTypes": [
"Economy"
],
"fareType": "Public",
"supplierSystem": "Avianca",
"agreementCode": "PUBLIC FARE",
"loginInformationIdentifier": "1"
}
],
"brandedFareName": "L",
"adtAmounts": {
"originalFare": {
"value": 538800,
"currencyCode": "COP"
},
"fare": {
"value": 538800,
"currencyCode": "COP"
},
"taxes": {
"value": 142670,
"currencyCode": "COP"
},
"total": {
"value": 681470,
"currencyCode": "COP"
}
},
"exchangeFlightDetails": [],
"shoppingKey": "eyJmcyI6W3sic2tmcyI6MCwiZiI6eyJleCI6eyJUb2tlbk9mZmVyIjoie1wiT2ZmZXJJZFwiOlwiU1AxRi0xNTIxNjg0Mjk1NDI0OTY4NTk1OS04MDFcIixcIlJlc3BvbnNlSWRcIjpcIlNQMUYtMTUyMTY4NDI5NTQyNDk2ODU5NTlcIixcIk9mZmVySXRlbXNcIjpbe1wiT2ZmZXJJdGVtSWRcIjpcIlNQMUYtMTUyMTY4NDI5NTQyNDk2ODU5NTktODAxLTFcIixcIkFnZUdyb3VwXCI6MH1dLFwiU2VydmljZUlkXCI6bnVsbH0ifSwiYmFnaW4iOjEsImJmbiI6IkwiLCJmYiI6IlNFU0IzQlI5IiwiZmMiOlsiUyJdLCJjYWJ0IjpbMl0sIkZhcmVUeXBlIjowLCJzcyI6IkF2aWFuY2EiLCJhYyI6IlBVQkxJQyBGQVJFIiwiTG9naW5JbmZvcm1hdGlvbklkZW50aWZpZXIiOiIxIn19LHsic2tmcyI6MSwiZiI6eyJleCI6eyJUb2tlbk9mZmVyIjoie1wiT2ZmZXJJZFwiOlwiU1AxRi0xNTIxNjg0Mjk1NDI0OTY4NTk1OS04MDFcIixcIlJlc3BvbnNlSWRcIjpcIlNQMUYtMTUyMTY4NDI5NTQyNDk2ODU5NTlcIixcIk9mZmVySXRlbXNcIjpbe1wiT2ZmZXJJdGVtSWRcIjpcIlNQMUYtMTUyMTY4NDI5NTQyNDk2ODU5NTktODAxLTFcIixcIkFnZUdyb3VwXCI6MH1dLFwiU2VydmljZUlkXCI6bnVsbH0ifSwiYmFnaW4iOjEsImJmbiI6IkwiLCJmYiI6IlNFU0IzQlI5IiwiZmMiOlsiUyJdLCJjYWJ0IjpbMl0sIkZhcmVUeXBlIjowLCJzcyI6IkF2aWFuY2EiLCJhYyI6IlBVQkxJQyBGQVJFIiwiTG9naW5JbmZvcm1hdGlvbklkZW50aWZpZXIiOiIxIn19XSwiaWQiOiI0In0=",
"loginInformationIdentifier": "1",
"supplierSystemName": "Avianca"
}
]
},
{
// [Outros FlighOptions]
}
],
},
"travellers": [
{
"ageGroup": "Adult"
}
],
"executionInformations": [
{
"supplierSystem": "Avianca",
"totalSupplierSearchTime": 5731.9708,
"waitingSupplierTime": 3177.0854
}
],
"errors": [
"There was an error searching on ClickBus"
]
}
API Reference
Consulte em mais detalhes a chamada de busca de vôos e seus diversos exemplos.
Você também pode executar esta chamada utilizando o guia de utilização do TripApi no Postman acessando a página Postman
🏁 Pronto!
Sua primeira busca foi efetuada com sucesso!
Agora é hora de entender como interpretar o resultado e como funciona o modelo de objetos envolvido em uma busca de vôos e posteriormente efetuar um fluxo completo de reserva e emissão.
🏃 Próximos passos
- Entenda o resultado de busca Compressão lógica
- Busca de vôos
- Exemplos de fluxo do Postman
- Documentação no Swagger
- Entre Em mais detalhes
Updated about 2 years ago

