Documentação completa da API REST para integração B2B de turismo. Permite buscar e reservar hotéis, aluguéis de carro, transfers e passeios, além de gerenciar reservas via backoffice.
O que separa uma POC de uma integração production-grade com a Iterpec. Use como gate antes de subir tráfego real.
Search + DoBooking happy path. Sem retries, sem logs.
GetBookingConditions, tratamento de erros, logs básicos.
Idempotência, retries, observabilidade, polling OnRequest.
Circuit breaker, multi-region, SLO alerts, reconciliação diária.
Todas as datas devem ser enviadas como string no formato ISO 8601. Nunca inclua informações de fuso horário nas datas, a menos que a documentação do campo específico indique o contrário.
| Campo | Formato | Exemplo | Observação |
|---|---|---|---|
| Datas (CheckinDate, CheckoutDate, ServiceDate) | YYYY-MM-DD | 2024-12-20 | Sempre no fuso horário local do destino. |
| Horários (Time, CheckInHour, CheckOutHour) | HH:MM | 14:00 | Sempre em UTC. Converta para o fuso local ao exibir ao usuário. |
| Timestamps de resposta (TimeSpan) | YYYY-MM-DD HH:MM:SS | 2024-12-20 14:30:58 | Sempre em UTC. |
| Datas em políticas de cancelamento (StartDate, EndDate) | YYYY-MM-DD | 2024-12-15 | Representam o intervalo em que a penalidade se aplica (inclusive). |
CheckInHour e CheckOutHour são sempre em UTC. Converta para o fuso local do usuário antes de exibir.
O **Token** do Search expira para uso em DoBooking, mas a **chave de ReToken** permanece válida por **25 horas**, permitindo revalidar a mesma busca sem refazer todo o Search. Objetivo do ReToken: **manter o mesmo Search original** (mesmos hotéis, mesmos quartos, mesmas datas), apenas confirmando se disponibilidade e preço se mantêm. Pode haver alterações — sempre tratar os três estados de retorno.
Disponibilidade e preço idênticos ao Search original. Prossiga normalmente para o DoBooking com o novo Token retornado.
O quarto ainda está disponível, mas houve mudança de preço ou de condições. Exiba as novas condições ao usuário antes de confirmar.
O quarto não está mais disponível. Retorne ao Search para buscar novas opções. Nenhuma penalidade é aplicada.
A API utiliza uma combinação de credenciais fixas (Username/Password) e tokens de sessão dinâmicos para autenticar e autorizar cada requisição.
1{2 "Credential": {3 "Username": "seu_usuario",4 "Password": "sua_senha"5 }6}
A API retorna códigos HTTP padrão. Todas as respostas são em JSON com compressão GZip disponível.
| Código | Nome | Descrição |
|---|---|---|
| 200 | OK | A API retorna códigos HTTP padrão. Todas as respostas são em JSON com compressão GZip disponível. |
| 400 | Bad Request | Invalid body — check required fields |
| 401 | Unauthorized | Invalid credentials |
| 404 | Not Found | Resource not found |
| 500 | Internal Server Error | Internal error — contact support |
Cada reserva possui um status que reflete seu estado atual no sistema Cangooroo.
Reserva confirmada, encaminhada ao hotel e com garantia de pagamento ao fornecedor.
Reserva cancelada. Cobranças de penalidade continuam se aplicáveis.
Falta de disponibilidade, mudança de tarifa, timeout do fornecedor ou nomes com caracteres especiais. Refaça a reserva sem risco de penalidade.
Timeout no recebimento do número de confirmação. Em 70% dos casos a reserva está confirmada. Não crie nova reserva — consulte comercial@iterpec.com.
Ocorre quando o cadastro do cliente está bloqueado por falta de crédito disponível.
Conteúdo pré-pago com tarifa em penalidade. O sistema aguarda pagamento via cartão.
Alguma conexão não comunicou o cancelamento ao fornecedor. Envie e-mail para comercial@iterpec.com.
Status de transição. Use GetBookingDetail para recuperar o status real.
Dados de destinos, aeroportos e conteúdo base que raramente mudam. Recomendado atualizar a cada 30 dias e armazenar em cache local.
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
| airportCode | string | req | Código IATA do aeroportoex: GRU |
| token | string | req | Token de acessoex: aac7faba-ca30-4071-a18a-41cda1424bdc |
| managerId | integer | req | ID do managerex: 270 |
1{}
Dados que não mudam com frequência (nomes de hotéis, endereços, coordenadas, IDs de destino) estão disponíveis para download. Recomendamos atualizar esses arquivos a cada 30 dias.
Lista completa de hotéis com IDs, nomes, destinos e categorias. Atualizar a cada 30 dias.
Lista de destinos com IDs, nomes multilíngues e códigos de país.
Lista de locadoras com lojas, endereços, horários e códigos de aeroporto.
Textos descritivos completos de hotéis em português (amenities, políticas, descrição geral).
Textos descritivos completos de hotéis em inglês.
Textos descritivos completos de hotéis em espanhol.
Sugestões em tempo real de destinos, hotéis e pontos de interesse. Ideal para campos de busca com digitação progressiva.
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
| any_term | string | req | Termo de busca (mínimo 3 caracteres)ex: miam |
| managerId | integer | req | ID do managerex: 270 |
| token | string | req | Token de acessoex: aac7faba-ca30-4071-a18a-41cda1424bdc |
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
| id | integer | opt | ID do destino ou hotel |
| type | string | opt | Tipo do resultado: Destination ou Hotel |
| name | string | opt | Nome do destino ou hotel |
| countryCode | string | opt | Código ISO do país |
| destinationId | integer | opt | ID do destino (quando type = Hotel) |
1{}
Enriquece os dados de um hotel com fotos, geolocalização, amenities e informações de quartos. Use o HotelId retornado pelo Autocomplete ou pelo Search.
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
| hotelId | integer | req | ID do hotel (retornado pelo Autocomplete ou Search)ex: 160459 |
| token | string | req | Token de acessoex: aac7faba-ca30-4071-a18a-41cda1424bdc |
| managerId | integer | req | ID do managerex: 270 |
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
| id | integer | opt | ID do hotel |
| destination | object | opt | Dados do destino com nome multilíngue |
| name | string | opt | Nome do hotel |
| address | string | opt | Endereço completo |
| latitude | number | opt | Latitude geográfica |
| longitude | number | opt | Longitude geográfica |
| category | string | opt | Categoria em estrelas (1–5) |
| amenities | array[string] | opt | Lista de comodidades do hotel |
| photos | array[string] | opt | URLs das fotos do hotel |
| rooms | array[object] | opt | Dados dos tipos de quarto com fotos e amenities |
1{}
filtro por produto
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
| Credential | object | req | Credenciais de acesso |
| Criteria | object | req | Critérios de busca |
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
| Token | string | opt | Token de sessão (válido 30 min). Obrigatório nos próximos passos. |
| TimeSpan | string | opt | Data e hora da pesquisa |
| TotalTime | number | opt | Tempo de resposta em segundos |
| Hotels | array[object] | opt | Lista de hotéis disponíveis com quartos e preços |
1{2 "Credential": {3 "Username": "{{meuusuario}}",4 "Password": "{{minhasenha}}"5 },6 "Criteria": {7 "CheckinDate": "2024-12-20",8 "CheckoutDate": "2024-12-27",9 "DestinationId": 1010422,10 "MainPaxCountryCodeNationality": "BR",11 "NumNights": 7,12 "ReturnHotelStaticData": true,13 "HidePackageRate": false,14 "CheapestRoomOnly": false,15 "SearchType": "Hotel",16 "SearchRooms": [17 {18 "ChildAges": [],19 "NumAdults": 2,20 "Quantity": 121 }22 ]23 }24}
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
| Credential | object | req | Credenciais de acesso |
| HotelId | integer | req | ID do hotel (apenas um por chamada) |
| RoomIds | array[integer|string] | req | IDs dos quartos selecionados no Search |
| Token | string | req | Token retornado pelo Search |
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
| Token | string | opt | Novo token — usar no DoBooking |
| CanPayLater | boolean | opt | true = pagamento pode ser feito depois |
| RestrictionType | string | opt | Tipo de restrição: CanBook, OnRequest, etc. |
| RevalidateBookingConditions | string | opt | SameRoomsFound | RoomsFoundWithChanges | RoomsNotFound |
| RoomsConditions | array[object] | opt | Condições detalhadas por quarto |
GetBookingConditions pode retornar valores obrigatórios a serem pagos diretamente no hotel de duas formas distintas e complementares. O integrador deve verificar ambos os campos antes de exibir o resumo da reserva ao hóspede. Omitir essas informações pode gerar reclamações, chargebacks e cancelamentos.| Campo | Tipo | Exemplo | Descrição |
|---|---|---|---|
| Name | string | "Resort Fee" | Nome da taxa conforme o fornecedor |
| Amount | number | 35.00 | Valor da taxa |
| Currency | string | "USD" | Moeda (pode ser diferente da reserva) |
| Type | string | "PerNight" | PerNight | PerStay | PerPerson | PerPersonPerNight |
| Description | string | "Collected at property" | Descrição adicional do fornecedor |
PropertyTaxes, elas podem aparecer embutidas no campo MoreInformation como texto corrido. Este campo contém observações gerais do hotel — políticas, restrições e, frequentemente, taxas obrigatórias não estruturadas.
Exemplo real:
``
"IMPORTANT: A mandatory resort fee of USD 35 per room per night will be collected at the property. This fee is not included in the room rate. Additional city tax of EUR 4.50 per person per night may apply."
``
O integrador deve sempre exibir o conteúdo completo do MoreInformation ao hóspede, mesmo que não consiga extrair valores estruturados. Uma IA ou regex pode ajudar a destacar os trechos relevantes.1{2 "Credential": {3 "Username": "{{meuusuario}}",4 "Password": "{{minhasenha}}"5 },6 "HotelId": 61221,7 "RoomIds": [35100101],8 "Token": "m+Jb/PG5CBOqYcquX10YRPZMmMF..."9}
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
| Credential | object | req | Credenciais de acesso |
| BookingId | string | req | "0" para nova reserva. ID existente para adicionar serviço.ex: "0" |
| HotelId | integer | req | ID do hotel |
| Paxs | array[object] | req | Dados dos passageiros |
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
| RequestId | integer | opt | ID da reserva confirmada (ReservationId) |
| TimeSpan | string | opt | Data e hora da confirmação |
| Rooms | array[object] | opt | Dados dos quartos confirmados |
1{2 "Credential": {3 "Username": "{{meuusuario}}",4 "Password": "{{minhasenha}}"5 },6 "BookingId": "0",7 "HotelId": 94171,8 "Paxs": [9 {10 "Address": "Rua das Flores",11 "AddressNumber": "100",12 "Age": 35,13 "City": "São Paulo",14 "Cpf": "123.456.789-00",15 "DocumentType": "CPF",16 "Email": "viajante@email.com",17 "MainPax": true,18 "Name": "João",19 "Surname": "NoBook",20 "PhoneDDD": "11",21 "PhoneNumber": "999999999",22 "State": "SP",23 "Title": "Mr",24 "ZipCode": "01310-100",25 "IsChild": false,26 "IsBilled": false27 }28 ]29}
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
| Credential | object | req | Credenciais de acesso |
| BookingId | string | req | ID da reserva (ReservationId)ex: "1864605" |
| RefundPayment | boolean | opt | true = solicita estorno do pagamento |
1{2 "Credential": {3 "Username": "{{meuusuario}}",4 "Password": "{{minhasenha}}"5 },6 "BookingId": "1864605",7 "RefundPayment": false8}
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
| Credential | object | req | Credenciais de acesso |
| ServiceIds | array[integer] | req | IDs dos serviços a cancelarex: [1864605] |
| RefundPayment | boolean | opt | true = estorno da taxa de cancelamento |
1{2 "Credential": {3 "Username": "{{meuusuario}}",4 "Password": "{{minhasenha}}"5 },6 "ServiceIds": [1864605],7 "RefundPayment": true8}
Pagamento de reservas via cartão de crédito. Utilizado quando `IsPrePayment: true` no Search.
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
| BookingId | string | req | ID da reserva |
| Credential | object | req | Credenciais de acesso |
| PaymentConditionId | string | req | ID da condição de pagamento |
| PaymentRequestCC1 | object | req | Dados do cartão de crédito |
1{2 "BookingId": "1864605",3 "Credential": {4 "Password": "{{minhasenha}}",5 "Username": "{{meuusuario}}"6 },7 "PaymentConditionId": "CC-001",8 "PaymentRequestCC1": {9 "ContractingParty": {10 "Address": "Rua das Flores, 100",11 "CPF": "123.456.789-00",12 "CityName": "São Paulo",13 "CountryCode": "BR",14 "Email": "titular@email.com",15 "PersonName": "João Silva",16 "PhoneDDD": "11",17 "PhoneNumber": "999999999"18 }19 }20}
Gestão e consulta de reservas. Use GetBookingList para monitorar alterações e GetBookingDetail para atualizar dados.
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
| Credential | object | req | Credenciais de acesso |
| BookingId | string | req | ID da reserva (ReservationId)ex: "1864605" |
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
| Booking | object | opt | Dados completos da reserva |
| Status | Significado | Analogia | Ação Recomendada |
|---|---|---|---|
| TechnicalProblem | Erro técnico durante a criação. Não se sabe se a reserva foi criada no fornecedor. | HTTP 500 de uma API | Polling a cada 5 min por até 30 min |
| Pending | Reserva criada, aguardando confirmação do fornecedor (ex: OnRequest). | HTTP 202 Accepted | Polling a cada 10 min por até 30 min |
| PendingCancellation | Solicitação de cancelamento enviada, aguardando confirmação do fornecedor. | HTTP 202 de um DELETE | Polling a cada 5 min por até 30 min |
| Rejected | Reserva rejeitada pelo fornecedor. Status final — sempre resultará em cancelamento. | HTTP 422 | Não requer polling — status final |
1{2 "Credential": {3 "Username": "{{meuusuario}}",4 "Password": "{{minhasenha}}"5 },6 "BookingId": "1864605"7}
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
| Credential | object | req | Credenciais de acesso |
| SearchBookingCriteria | object | opt | Filtros de busca (todos opcionais) |
1{2 "Credential": {3 "Password": "{{minhasenha}}",4 "Username": "{{meuusuario}}"5 },6 "SearchBookingCriteria": {7 "BookingNumber": [],8 "CheckinDateFrom": "2024-01-01",9 "CheckinDateTo": "2024-01-31"10 }11}
Plugue nosso servidor MCP em 20+ clientes de IA (Claude, Cursor, Windsurf, Cline, Zed, ChatGPT, Lovable, n8n…) e seu agente passa a consultar endpoints, montar payloads, ler o changelog e seguir as regras de reserva sozinho. Sem ticket, sem reunião de onboarding. Copie a configuração, cole no seu cliente, comece a integrar.
Para usar MCP, Skills e Vibecoding em produção (chamar Search, GetBookingConditions, DoBooking de verdade) você precisa de 2 credenciais:
https://iterpec.com/api/mcp.Credential.Username / Credential.Password). Sem eles, os endpoints de Search/Booking respondem 401.Ambas são liberadas só após preencher o formulário comercial e assinar contrato com a Iterpec. Antes disso, o MCP responde apenas documentação (schema, exemplos, changelog) — útil para prototipar, mas sem acesso ao inventário real.
Username + Password no body — autenticam a API de produção.| Nome | Descrição | Parâmetros |
|---|---|---|
| list_endpoints | Lista grupos e endpoints da API (com filtro opcional por produto ou termo). | product?, search? |
| get_endpoint | Detalhes completos de um endpoint: parâmetros, exemplo curl e resposta. | endpointId |
| get_changelog | Notas de release da API Cangooroo, ordem cronológica decrescente. | service?, since?, limit? |
| get_reference | Fluxo de reserva, status, ReToken e convenções de data/UTC. | topic ("booking_statuses" | "retoken" | "date_conventions" | "all") |
Faça um handshake JSON-RPC para listar as tools disponíveis. Substitua SEU_TOKEN_AQUI.
curl --location 'https://iterpec.com/api/mcp' \
--header 'Authorization: Bearer SEU_SHARED_SECRET_AQUI' \
--header 'Accept: application/json, text/event-stream' \
--header 'Content-Type: application/json' \
--data '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/list"
}'20 clientes MCP suportados. Clique no logo para ver a configuração específica.
{
"mcpServers": {
"iterpec-api": {
"command": "npx",
"args": [
"-y", "mcp-remote", "https://iterpec.com/api/mcp",
"--header", "Authorization:${ITERPEC_MCP_TOKEN}"
],
"env": { "ITERPEC_MCP_TOKEN": "Bearer SEU_TOKEN_AQUI" }
}
}
}Accept: application/json, text/event-stream em todas as requisições POST (padrão MCP Streamable HTTP). Apenas o método POST é aceito; GET/DELETE retornam 405. O shared secret é validado por comparação direta — rotacione via Lovable Cloud quando necessário.© 2026 Iterpec · comercial@iterpec.com