ITERNODE / v0.2.0PT-BR · EN-US · ES
API · 99.98% UPTIMEP95 76MSBUILD 0028-c91
Hotel data infrastructure· B2B travel

A camada canônica de dados de hotel para B2B travel.

1.3M hotéis cross-mapeados. Uma resposta NDJSON no lugar de dez. Cinco linhas de SDK. Sandbox em 30 segundos — sem cartão, sem ligação.

Pegar sandbox key Ver demo ao vivo· npm install @iternode/sdk
Hotéis canônicos
1.3Mcross-mapeados · 50+ países
Latência p95
76 msresolve · region edge
Payload
10× menorNDJSON streaming · dedup canônico
§ 01O problema, em duas respostas

Dez suppliers. Uma resposta.

Search fan-out cru retorna 50MB de JSON aninhado e mata seu servidor às 14h de uma sexta. Iternode dedupa por hotel canônico e devolve um stream NDJSON. O diff é literal.

Sem Iternode · fan-out cru~52MB · 600k entries
// 10 suppliers × 2,000 hotéis × 30 quartos
const responses = await Promise.all([
  ratehawk.search(query),     // 5.2 MB
  expedia.search(query),      // 7.8 MB · XML
  hotelbeds.search(query),    // 4.1 MB · SOAP
  agoda.search(query),        // 6.0 MB
  booking.search(query),      // 8.4 MB
  ... // + 5 more suppliers
])

// dedup on the client...
// merge schemas on the client...
// crash deserializing on the client
throw new Error('JS heap out of memory')
Server crash em peak10 schemas distintosXML · SOAP · RESTcliente reconcilia
Com Iternode · stream NDJSON~5.1MB · streaming
// uma chamada · dedup canônico · NDJSON
const stream = await node.stream.search({
  city:    'Paris',
  checkin: '2026-06-01',
  nights:  3,
})

for await (const hotel of stream) {
  // já deduplicado por hotel canônico
  // quartos agrupados por signature
  render(hotel)              // stream first paint < 200ms
}

// done. 1 schema. 1 ID. ship.
10× menorFirst paint < 200ms1 schema canônicobackpressure aware
§ 02Por que isso importa

Todo hotel existe dez vezes. Nenhum concorda.

Três dores observadas em quase toda integração que auditamos. A boa notícia: são previsíveis. A melhor: já resolvemos.

Fragmentação · 7 em 10 ints

Dez IDs. Um prédio.

Cada supplier rotaciona ID interno e te avisa por release note — quando avisa. Mapeia segunda, quebra sexta. Iternode mantém o crosswalk.

Sintoma: integração silenciosamente parando · alertas falsos · fim de semana de quem está on-call.
Conteúdo velho · clocks desalinhados

Fotos de 2019. Preço de 30s atrás.

Conteúdo atualiza trimestralmente. Preço expira em segundos. Dois relógios opostos. Cache invalidation virou seu segundo trabalho — e ele não te paga.

Sintoma: usuário fecha tab durante checkout · drop de conversão silencioso.
Fan-out crash · peak load

Search retorna 50MB. Servidor cai.

10 suppliers × 2.000 hotéis × 30 quartos = 600k entries em uma resposta. Servidor não desserializa. Agência vê timeout. Você descobre segunda.

Sintoma: dashboard de vendas no zero · ticket P0 às 2h da manhã · post-mortem na segunda.
§ 03Plataforma · 3 módulos

Comece pelo Registry. Adicione o resto quando precisar.

Cada módulo roda sozinho. Juntos viram plataforma. Hierarquia honesta — Registry é GA, Stream é beta público, Market chega no Q4.

M-02BETA · PÚBLICO

Stream

// search · rate · booking

Bring-your-own-credentials. Fan-out paralelo, dedup por hotel canônico, agrupamento de quartos por signature. Uma resposta NDJSON em vez de dez.

  • ModeloBYOC
  • Payload10× menor
  • TransporteNDJSON · SSE
  • First paint< 200ms
Pedir acesso beta
M-03Q4 2026

Market

// licensed inventory

Quando vender direto entrar no roadmap, plug no nosso aggregator licenciado. Um contrato no lugar de doze. Net rates, regras unificadas, uma pipeline de reconciliação.

  • LicençaOTA-grade
  • RatesNet
  • BookingInstant
  • ReconciliaçãoUnified
Entrar na waitlist
§ 04Developer surface

Cinco linhas. Todo hotel.

Sem XML. Sem SOAP. Sem ligação comercial antes de sandbox. Sem "fale com o time pra ver preço". É isso que infra moderna parece.

ITN-SDK v0.2 · TypeScript·copy ⌘C
import { Iternode } from '@iternode/sdk'

const node = new Iternode({ apiKey: process.env.ITERNODE_KEY })

// um ID canônico cross-supplier
const hotel = await node.registry.resolve({
  name:    'Copacabana Palace',
  city:    'Rio de Janeiro',
  country: 'BR',
})

hotel.id          // → itn_7k9m2p
hotel.suppliers   // → { ratehawk, expedia, hotelbeds }
hotel.lastFresh   // → 2026-04-24T14:47:22Z
Response em < 80ms p95 · stream-firstLer referência completa da API →
Design partners · early access (logos reais entram aqui)
§ 05O que dizem · prova social

Eles trocaram seis meses de integração por uma sprint.

Quote real do design partner entra aqui assim que o GTM destravar publicação.

Tínhamos 4 devs reconciliando IDs há cinco meses. Plugamos o Registry numa quinta, deletamos 12k linhas de mapper na sexta. O search agora paga o servidor.

RTRenan T. · CTO · OTA brasileira (placeholder real entra aqui)

Sandbox em 30 segundos. Sem ligação.

Cole sua API key, instancie o SDK, faça o primeiro resolve. Se quiser ligar depois, a gente atende.

Iternode — A infra de dados de hotel pra OTAs e consolidadoras