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.
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.
// 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')// 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.Três dores observadas em quase toda integração que auditamos. A boa notícia: são previsíveis. A melhor: já resolvemos.
Cada supplier rotaciona ID interno e te avisa por release note — quando avisa. Mapeia segunda, quebra sexta. Iternode mantém o crosswalk.
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.
10 suppliers × 2.000 hotéis × 30 quartos = 600k entries em uma resposta. Servidor não desserializa. Agência vê timeout. Você descobre segunda.
Cada módulo roda sozinho. Juntos viram plataforma. Hierarquia honesta — Registry é GA, Stream é beta público, Market chega no Q4.
Um ID canônico por hotel real, cross-mapeado em todo supplier integrado. Conteúdo unificado: amenities, fotos, políticas, coordenadas — deduplicado, normalizado, sempre fresco.
Bring-your-own-credentials. Fan-out paralelo, dedup por hotel canônico, agrupamento de quartos por signature. Uma resposta NDJSON em vez de dez.
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.
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.
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:22ZQuote 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.
Cole sua API key, instancie o SDK, faça o primeiro resolve. Se quiser ligar depois, a gente atende.