Cada serviço depende de contratação e habilitação próprias. Se Hotel, RentACar, Transfer, Tour, Flight, Insurance, Payment, ClientBackOffice ou Commons ainda não estiver contratado/habilitado, contate comercial@iterpec.com; acesso a um serviço não habilita os demais. Melhorias documentais preservam a URL base dinâmica https://ws.iterpec.com; Commons mantém seu endereço próprio.
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.
Após criação pendente: tentativa não criada e não cobrada. Em cancelamento solicitado de reserva criada: multas seguem a política. Distinguir os dois contextos.
Tentativa não criada e não cobrada; tratar como cancelada. Pode ocorrer por idades das crianças divergentes entre pesquisa/reserva, indisponibilidade ou mudança de preço.
Resultado incerto: acompanhar a cada 5 minutos e consultar operacao@iterpec.com até Confirmed ou Cancelled. Não reenviar DoBooking.
Resultado incerto, como Pending ou erro 501. Não criar nova reserva; consultar operacao@iterpec.com e GetBookingDetail a cada 5 min até Confirmed ou Cancelled.
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 |
|---|---|---|---|
| managerId | integer | req | Manager Iterpec: 270 |
| token | string | req | Token próprio Commons |
| parentId | number | opt | Filtro opcional de pai |
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
| DestinationId | integer | opt | ID do destino |
| Name | string | opt | Nome |
| Type | string | opt | Tipo geográfico |
| Children | array[object] | opt | Filhos da hierarquia; exemplo publicado, validar resposta real |
1{}
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
| IATA | string | req | Código IATA do aeroportoex: GRU |
| token | string | req | Token de acessoex: SEU_TOKEN_ITERPEC |
| 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: SEU_TOKEN_ITERPEC |
| 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: SEU_TOKEN_ITERPEC |
| 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 | Descartar Token da descoberta. Somente Token do Search detalhado (CheapestRoomOnly=false) inicia a sessão usada em Conditions/DoBooking; atualizar quando revalidado. |
| 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": true,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 |
| DiscountCode | string | opt | Reenviar o mesmo cupom do Search para validar preço final e disponibilidade. |
| 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 vigente da sessão iniciada no Search detalhado do hotel, nunca o da descoberta. |
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
| Token | string | opt | Token vigente revalidado — atualizar o token da sessão e usar no DoBooking, sem voltar ao token da descoberta. |
| book | boolean | opt | Disponibilidade (conceito CanBook): true = fornecedor validou a oferta neste instante, mas a reserva ainda não foi criada; false = tarifa indisponível, bloquear DoBooking e retirar o ID de quarto/tarifa da fila nesta sessão. Refazer Search do mesmo hotel com cheapestRoomOnly=false, mesmas datas e ocupação; excluir a oferta invalidada, pedir nova escolha e validar a nova tarifa com o novo Token. Ausência não é confirmação implícita. |
| 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 |
| Token | string | req | Token vigente do Search detalhado, atualizado pelo GetBookingConditions quando retornado. |
| 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 "Token": "TOKEN_VIGENTE_DO_SEARCH_DETALHADO",7 "BookingId": "0",8 "HotelId": 94171,9 "Paxs": [10 {11 "Address": "Rua das Flores",12 "AddressNumber": "100",13 "Age": 35,14 "City": "São Paulo",15 "Cpf": "123.456.789-00",16 "DocumentType": "CPF",17 "Email": "viajante@email.com",18 "MainPax": true,19 "Name": "João",20 "Surname": "{{SobrenomeReal}}",21 "PhoneDDD": "11",22 "PhoneNumber": "999999999",23 "State": "SP",24 "Title": "Mr",25 "ZipCode": "01310-100",26 "IsChild": false,27 "IsBilled": true28 }29 ]30}
| 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 |
|---|---|---|---|
| Credential | object | req | Usuário e senha de produção específicos deste cliente; não enviar nem registrar em logs. |
| BookingId | string | req | ID de reserva existente |
1{2 "Credential": {3 "Username": "{{meuusuario}}",4 "Password": "{{minhasenha}}"5 },6 "BookingId": "{{BookingId}}"7}
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
| Credential | object | req | Usuário e senha de produção específicos deste cliente; não enviar nem registrar em logs. |
| Token | string | req | Token vigente das condições |
1{2 "Credential": {3 "Username": "{{meuusuario}}",4 "Password": "{{minhasenha}}"5 },6 "Token": "{{Token}}"7}
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
| Credential | object | req | Usuário e senha de produção específicos deste cliente; não enviar nem registrar em logs. |
| BookingId | string | req | Reserva existente |
| ContractingParty | object | req | Dados do contratante na raiz, não dentro de PaymentRequestCC1. |
| CreditCard | object | req | Dados do cartão apenas no envio autorizado; nunca armazenar SecurityCode ou registrar cartão em logs. |
| ServicesId | array | opt | Opcional; omitir paga todos os serviços, preencher restringe aos serviços escolhidos. |
| RetainCommission | boolean | opt | Retenção de comissão conforme contrato |
| SmartCommissionValue | number | opt | Valor de comissão conforme contrato |
1{2 "Credential": {3 "Username": "{{meuusuario}}",4 "Password": "{{minhasenha}}"5 },6 "BookingId": "{{BookingId}}",7 "ContractingParty": {8 "PersonName": "{{PersonName}}",9 "CPF": "{{CPF}}",10 "Email": "{{Email}}",11 "Address": "{{Address}}",12 "AddressComplement": "{{AddressComplement}}",13 "AddressNumber": "{{AddressNumber}}",14 "CityName": "{{CityName}}",15 "CountryCode": "{{CountryCode}}",16 "DistrictName": "{{DistrictName}}",17 "PhoneNumber": "{{PhoneNumber}}",18 "PhoneNumberDDD": "{{PhoneNumberDDD}}",19 "PhoneNumberDDI": "{{PhoneNumberDDI}}",20 "StateCode": "{{StateCode}}",21 "ZipCode": "{{ZipCode}}",22 "ReceiveCreditCardReceipt": "false"23 },24 "CreditCard": {25 "Holder": "{{Holder}}",26 "CardNumber": "{{CardNumber}}",27 "SecurityCode": "{{SecurityCode}}",28 "MonthExpiration": 12,29 "YearExpiration": 2028,30 "NumberPayments": 1,31 "CardOperator": "{{CardOperator}}"32 }33}
Gestão e consulta de reservas. Use GetBookingList para monitorar alterações e GetBookingDetail para atualizar dados.
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
| Username | string | req | Usuário do cliente |
| Password | string | req | Senha do cliente |
1{}
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
| Credential | object | req | Usuário e senha de produção específicos deste cliente; não enviar nem registrar em logs. |
| CurrencyCodeFrom | string | req | Moeda ISO de origem |
| CurrencyCodeTo | string | req | Moeda ISO de destino |
| ServiceType | number | req | Código do tipo de serviço habilitado |
1{2 "Credential": {3 "Username": "{{meuusuario}}",4 "Password": "{{minhasenha}}"5 },6 "CurrencyCodeFrom": "USD",7 "CurrencyCodeTo": "BRL",8 "ServiceType": 19}
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
| Credential | object | req | Usuário e senha de produção específicos deste cliente; não enviar nem registrar em logs. |
| Incident | object | req | Wrapper obrigatório, filtros opcionais |
1{2 "Credential": {3 "Username": "{{meuusuario}}",4 "Password": "{{minhasenha}}"5 },6 "Incident": {7 "BookingId": "{{BookingId}}"8 }9}
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
| Credential | object | req | Usuário e senha de produção específicos deste cliente; não enviar nem registrar em logs. |
| Incident | object | req | Grafia creatIncident publicada; não inventar createIncident |
1{}
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
| Credential | object | req | Usuário e senha de produção específicos deste cliente; não enviar nem registrar em logs. |
| IncidentMessage | object | req | Mensagem para ocorrência existente |
1{}
| 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 |
| Resultado | Significado | Ação |
|---|---|---|
| Confirmed | Reserva criada e confirmada. | Emitir voucher; consultar detalhes posteriores para HCN e link de check-in. |
| Rejected | Tentativa não criada; equivale a Cancelled, não cobrada. | Conferir idades das crianças, disponibilidade e preço; oferecer nova pesquisa. |
| Pending / TechnicalProblem / 501 | Não se sabe se a reserva foi criada. Analogia operacional ao erro 501, não prova de rejeição. | E-mail para operacao@iterpec.com; GetBookingDetail por BookingId a cada 5 minutos até Confirmed ou Cancelled. Não reenviar às cegas. |
| Cancelled após criação pendente | Tentativa não criada e não cobrada; não foi cancelamento solicitado pelo cliente. | Resultado resolvido: pode iniciar nova reserva. |
| PendingCancellation | Cancelamento solicitado ainda sem resolução. | Consultar Operação e acompanhar; não confundir com falha de criação. Multas seguem a política da reserva. |
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 | req | Wrapper obrigatório; seus filtros são opcionais |
1{2 "Credential": {3 "Password": "{{minhasenha}}",4 "Username": "{{meuusuario}}"5 },6 "SearchBookingCriteria": {7 "BookingNumber": [],8 "InitialServiceDate": "2024-01-01",9 "FinalServiceDate": "2024-01-31"10 }11}
Cancelamento × Regime de alimentação são dependentes em cascata (igual Expedia/Hotels.com), não paralelos. O card mostra sempre o cheapest da interseção e o seletor de meal só exibe opções que existem para o cancelamento escolhido. Default = combinação mais barata absoluta do hotel.
Demo interativo
Matriz completa — todas as políticas, vários meals
Política de cancelamento
Regime de alimentação
Tente:
Snippet completo (copiável)
// 1. Tipos
type CancellationType = 'free' | 'partial' | 'non_refundable';
type MealCode = 'RO' | 'BB' | 'HB' | 'FB' | 'AI';
interface RateMatrix {
matrix: Record<CancellationType, Partial<Record<MealCode, RoomCombination>>>;
availableCancellations: CancellationType[];
availableMealsByCancellation: Record<CancellationType, MealCode[]>;
cheapestOverall: RoomCombination;
}
// 2. Construção O(n) sobre as combinations do Search
function buildRateMatrix(combinations: RoomCombination[]): RateMatrix {
const matrix = { free: {}, partial: {}, non_refundable: {} };
let cheapestOverall = combinations[0];
for (const c of combinations) {
const cancel = c.cancellationPolicy.type;
const meal = c.mealPlan.code;
const current = matrix[cancel][meal];
if (!current || c.bestPrice.amount < current.bestPrice.amount) {
matrix[cancel][meal] = c;
}
if (c.bestPrice.amount < cheapestOverall.bestPrice.amount) cheapestOverall = c;
}
const availableCancellations = Object.keys(matrix)
.filter(k => Object.keys(matrix[k]).length > 0);
const availableMealsByCancellation = Object.fromEntries(
availableCancellations.map(k => [
k,
Object.keys(matrix[k]).sort(
(a, b) => matrix[k][a].bestPrice.amount - matrix[k][b].bestPrice.amount
),
])
);
return { matrix, availableCancellations, availableMealsByCancellation, cheapestOverall };
}
// 3. Comportamento dos seletores (React)
function HotelCard({ combinations }) {
const rate = useMemo(() => buildRateMatrix(combinations), [combinations]);
const [cancel, setCancel] = useState(rate.cheapestOverall.cancellationPolicy.type);
const [meal, setMeal] = useState(rate.cheapestOverall.mealPlan.code);
const availableMeals = rate.availableMealsByCancellation[cancel];
const effectiveMeal = availableMeals.includes(meal) ? meal : availableMeals[0];
const selected = rate.matrix[cancel][effectiveMeal];
function onCancelChange(next) {
setCancel(next);
const meals = rate.availableMealsByCancellation[next];
if (!meals.includes(meal)) setMeal(meals[0]); // auto-relaxar
}
// ... render chips: cancelamento (todos visíveis, indisponíveis disabled),
// meal (apenas os disponíveis para o cancel escolhido)
}Plugue nosso servidor MCP em 19+ clientes de IA (Claude, Cursor, Windsurf, Cline, Zed, ChatGPT, 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") |
Antes de ir para produção, cada cliente prova etapa por etapa que respeita as regras críticas (idempotency, taxas locais, multi-quarto, polling, ReToken). Cada etapa é aprovada ou reprovada de forma independente — você pode submeter cancel antes de aprovar booking.
get_homologation_checklist — provas exigidas por etapa.validate_step_payload — validação local determinística (gratuita, ilimitada).submit_step_for_homologation — envia evidência (PII mascarada) para revisão.get_homologation_status — status por etapa com motivo e correção exigida.get_certificate — emitido após todas as etapas obrigatórias aprovadas.Etapas obrigatórias para certificado: search_detail, conditions, booking, detail, cancel. Opcionais: search_quick, multi_room. Requer token MCP assinado (formato imcp.*).
Prefere UI? Use o sandbox web em /sandbox — mesma validação determinística, mesmo fluxo de revisão, sem precisar de cliente MCP.
Mapa visual de quem chama o quê, em qual ordem, com qual token, e como o endpoint do Iterpec WS muda em 01/07/2026. As mesmas fontes Mermaid estão expostas em get_reference{topic:'flow_diagrams'} para que a IA cliente possa pedi-las direto.
Quem chama o quê, em que ordem, com qual token.
sequenceDiagram
autonumber
participant U as Usuário final
participant C as Client App (IA integradora)
participant M as MCP Server<br/>iterpec.com/api/mcp
participant W as Iterpec WS<br/>(host por data)
Note over C,M: Auth MCP: Bearer imcp.* ou wsk_*
Note over C,W: Auth WS: Username + Password → ReToken 25h
C->>M: tools/call start_here
M-->>C: Mapa de tools + system_instructions
C->>M: tools/call get_reference{topic:"api_endpoint"}
M-->>C: Host correto (até/após 01-07-2026)
Note over C: Catálogo GraphQL local e HotelDetail cacheado de todos os hotéis
U->>C: Destino ou endereço + raio, datas e hóspedes
C->>W: Search descoberta (DestinationId OU HotelIds, cheapestRoomOnly=true)
W-->>C: Menor preço por hotel + Token de descoberta
Note over C: Descartar Token da descoberta
U->>C: Escolhe hotel
C->>W: Search (HotelIds=[id], cheapestRoomOnly=false)
W-->>C: Todos os quartos e tarifas + Token da sessão
U->>C: Escolhe quarto e tarifa
C->>W: GetBookingConditions (Token vigente, quarto selecionado)
W-->>C: book, políticas, taxas, nomes/endereço, revalidação
alt book=false ou RoomsNotFound
Note over C: Excluir ID da oferta inválida na sessão
C->>W: Search mesmo hotel false, mesmas datas e ocupação
W-->>C: Novas ofertas e novo Token
C-->>U: Tarifa indisponível, escolher nova oferta e revalidar
else Oferta disponível
opt Quarto ou condições mudaram
C-->>U: Original indisponível, apresentar substituto e condições
U->>C: Aceite explícito
end
Note over C: isBilled=true sem cartão, false exige cartão. Mesmas idades das crianças
C->>W: DoBooking (Token vigente, Idempotency-Key)
W-->>C: BookingId + ServiceIds + status
loop Pending, TechnicalProblem ou 501: cada 5 minutos até resolução
Note over C: Não reenviar DoBooking, consultar Operação por e-mail
C->>W: GetBookingDetail (BookingId)
W-->>C: Confirmed OU Cancelled
end
alt Confirmed
C-->>U: Reserva confirmada e voucher do cliente B2B
Note over C: Detalhes posteriores podem trazer HCN e link de check-in
else Rejected ou Cancelled após criação pendente
C-->>U: Tentativa não criada e não cobrada, pode iniciar nova reserva
end
end
opt Cancelamento solicitado de reserva criada
C->>W: CancelAllHotelServices (BookingId) OU CancelByService (ServiceIds[])
W-->>C: Status e multas conforme políticas
endimcp.<ws>.<sig> — assinado pelo admin, para IAs (Claude/Cursor).wsk_<secret> — token de workspace, para CI/CD e scripts.Authorization: Bearer … contra iterpec.com/api/mcp.ReToken com TTL 25h — renovar antes de expirar.iterpec-ws.cangooroo.net; após: ws.iterpec.com.Execute chamadas JSON-RPC reais contra /api/mcp sem precisar instalar Claude Desktop ou Cursor. Cole seu token (imcp.* ou wsk_*), liste as tools, escolha uma, edite os argumentos JSON e clique Executar. O token fica apenas em sessionStorage (some ao fechar a aba).
Dica: tokens imcp.* recebem headers Deprecation/Sunset a partir de 30/09/2026. Se vir HTTP 429, respeite o Retry-After.
Visualize a timeline didática dos dois fluxos descritos por get_reference{topic:'corporate_approval'}: reserva primeiro (fora da penalidade) ou aprovar primeiro com polling GBC (em penalidade). Esta simulação é local — não chama a API.
Regra dura: em tarifa não-reembolsável, NUNCA executar DoBooking antes da aprovação; sempre fazer GetBookingConditions fresh (<5 min) na abertura da tela do aprovador e exibir o diff de preço/quarto.
Prefere terminal? Faça o handshake JSON-RPC direto. 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"
}'Disponibilidade e SLO em tempo real em /status. Métricas Prometheus para observabilidade externa em GET /api/public/mcp-metrics (Bearer ITERPEC_MCP_METRICS_TOKEN).
19 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 pelo painel de secrets quando necessário.© 2026 Iterpec · comercial@iterpec.com