Guia de integração

A API do Booking.com: como funciona o acesso e o que te permite mesmo fazer

Escrito para o programador ou fundador técnico a quem apontaram as APIs de conectividade do Booking.com. Explica como funcionam a designação como parceiro e a ligação por propriedade, o modelo de dados de que tudo o resto depende, e os dois ou três comportamentos que fazem uma atualização de tarifas no Booking.com resultar no papel e não mudar nada na prática.

O que é a API do Booking.com

As APIs do Booking.com são feitas para fornecedores de conectividade: os channel managers e os sistemas de gestão de propriedades que mantêm o alojamento sincronizado em nome de muitas propriedades ao mesmo tempo. Não são APIs para consumidores, não há uma superfície pública de pesquisa ou reserva para terceiros e não há um portal de programadores onde te registares.

Na prática são várias superfícies de produto debaixo de uma mesma parceria: disponibilidade e tarifas, reservas, configuração de propriedades e quartos, conteúdo, mensagens, avaliações e encargos. Comportam-se de forma diferente entre si, são concedidas separadamente e partes da superfície mais antiga são XML e não JSON. Vindo do Airbnb, quase nenhum dos teus pressupostos se mantém.

Como obtenho acesso à API do Booking.com?

Três camadas, concedidas por três partes diferentes, tal como no Airbnb, mas com outra forma.

  1. O Booking.com designa a tua empresa como fornecedor de conectividade. Candidatas-te, és avaliado a nível comercial e técnico, e há um passo de certificação para as superfícies que pretendes usar. É uma relação ao nível da empresa que se mede em meses.
  2. Recebes credenciais para uma conta de máquina. Ao contrário dos tokens OAuth por anfitrião do Airbnb, uma única conta de máquina atua por todas as propriedades ligadas a ti. Essa única credencial é o raio de impacto de todo o teu negócio, e muda a forma como lês os erros — vê a nota abaixo.
  3. Cada propriedade liga-te a partir da sua própria Extranet. O anfitrião entra na Extranet do Booking.com, abre a lista de fornecedores de conectividade, procura o teu fornecedor pelo nome e clica em Ligar. Até o fazer, a tua conta de máquina não consegue ver essa propriedade. Também vai precisar do Hotel ID numérico à mão.

As capacidades são concedidas separadamente, superfície a superfície

A designação como parceiro não é um único interruptor. As capacidades individuais — o conteúdo é a que apanha toda a gente — são ativadas separadamente para o parceiro. Uma propriedade pode estar ativa, a receber reservas e a aceitar escritas de tarifas e disponibilidade, enquanto as chamadas de conteúdo respondem 403. Não há nada avariado; essa capacidade nunca foi concedida. Confirma a que superfícies tens mesmo direito antes de planeares trabalho que dependa de uma.

Uma única conta de máquina significa que um 401 nunca é problema de um só anfitrião

Como todas as propriedades passam pela mesma credencial, o erro que recebes diz-te que camada falhou — e confundir as duas camadas é como uma falha momentânea de token se transforma numa desligação em massa na tua própria base de dados.

Um 403 que indica credenciais inválidas para um hotel significa que esse anfitrião te revogou na Extranet: uma desligação real, ao nível da propriedade. Um 401 é a própria conta de máquina e afeta todas as propriedades ao mesmo tempo — global, passageiro e nunca motivo para marcar ninguém como desligado. Um 403 sem código de credenciais é ambíguo e não deve mudar nada.

O nosso próprio sistema de reconciliação só marca uma ligação como desligada perante um 403 ao nível do hotel com um código explícito de credenciais inválidas. Tudo o resto — 401, 429, 5xx, timeouts, erros de rede, falhas de parsing — é classificado como desconhecido e não mexe em nenhum estado. Um falso positivo durante uma falha do Booking.com custa muito mais do que um caso que escapa.

Com a Repull, a parte do lado do anfitrião é uma única sessão alojada com a tua marca; o anfitrião faz o passo na Extranet e cola o Hotel ID, e tu recebes uma ligação. O passo a passo está em Ligar o Booking.com.

curl -X POST 'https://api.repull.dev/v1/connect/booking' \
  -H 'Authorization: Bearer sk_live_YOUR_KEY' \
  -H 'Content-Type: application/json' \
  -d '{ "redirectUrl": "https://yourapp.com/connected" }'

Propriedades, quartos e planos tarifários

Percebe isto e o resto do Booking.com encaixa. Percebe mal e cada endpoint parece arbitrário.

Booking.com property   "hotel_id": 5432505        ← the building
└── room               "roomBookingId": 543250501 ← what a guest books
    └── rate plan      "rateId": 98765            ← the terms it sells on
        └── price at an occupancy                ← what you actually write

Uma propriedade é um edifício. Os quartos são o que os hóspedes reservam. Os planos tarifários são as condições comerciais com que um quarto é vendido, e um preço pertence a uma combinação (quarto, plano tarifário, data, ocupação), não a uma noite. Uma moradia com um quarto é o caso simples; um apart-hotel com vinte unidades é uma única propriedade com vinte quartos, e isso é o normal, não um caso raro.

A mesma unidade também pode aparecer em mais do que uma propriedade do Booking.com, normalmente porque foi republicada ao longo do tempo, e um quarto que não está associado a um dos teus anúncios não pertence a nada — as suas reservas não têm onde cair. Associa os quartos durante o fluxo de ligação, não depois.

Dois espaços de ids em caminhos que se leem da mesma forma

As integrações com o Booking.com transportam um id de hotel do Booking e o teu próprio id de anúncio lado a lado, e passar o errado produz um 404 que parece exatamente um problema de permissões.

Na Repull a regra é: um id no caminho é um id de anúncio da Repull, enquanto property_id como parâmetro ou campo do corpo é um id de hotel do Booking.com. Por isso GET /v1/channels/booking/properties/{id}/rooms recebe um id de anúncio e PUT /v1/channels/booking/availability recebe um id de hotel. Os nomes são históricos e mudá-los partiria todas as integrações já construídas, por isso são as mensagens de erro que indicam o espaço de ids. Tabela completa em Propriedades e anúncios no Booking.com.

Posso atualizar tarifas através da API do Booking.com?

Sim, e é a superfície mais usada de toda a parceria. Escreves um preço para um quarto num plano tarifário ao longo de um intervalo de datas, opcionalmente com restrições de estadia e de chegada na mesma chamada.

curl -X PUT 'https://api.repull.dev/v1/channels/booking/availability' \
  -H 'Authorization: Bearer sk_live_YOUR_KEY' \
  -H 'Content-Type: application/json' \
  -d '{
    "type": "rates",
    "property_id": "1234567",
    "updates": [{
      "roomId": "123456701",
      "rateId": "98765",
      "dateRange": { "start": "2026-11-04", "end": "2026-11-04" },
      "price": 210,
      "currency": "USD",
      "occupancy": 4
    }]
  }'

roomId e rateId vêm de GET /v1/channels/booking/properties/{id}/rooms. Tudo o resto do pedido — e há mais do que esperas — está em Atualizar preços no Booking.com.

Porque é que a minha atualização de preço no Booking.com não fez nada?

É a pergunta que traz as pessoas a esta página, e tem duas respostas independentes. As duas parecem um sucesso.

A ocupação faz parte da chave, não é uma preferência

O Booking.com não guarda “o preço desta noite”. Guarda um preço para uma noite para um número de pessoas num plano tarifário. Por isso a ocupação que envias decide que preço estás a substituir. Cada valor vai com uma ocupação, quer a indiques quer não.

A Repull obtém a ocupação a partir dos próprios dados do Booking.com para o par (quarto, plano tarifário) quando não a indicas, devolve-te o valor usado e de onde veio, e recusa a escrita com um 422 quando não a consegue resolver. Nunca se envia um valor às cegas.

O recibo não é uma confirmação

O Booking.com costuma responder a uma escrita de tarifas com um recibo sem estado por data. O corpo é literalmente:

{"ok": ""}

É um recibo do pedido, não o estado do preço

Nada nessa resposta diz que o preço está publicado em qualquer das datas que enviaste. Qualquer integração que diga “todas as atualizações aplicadas” com base nisso está a adivinhar, e o único caso em que erra — uma ocupação que não coincide — é exatamente o que não consegue ver.

A única resposta honesta é voltar a ler as datas e comparar. As escritas são aplicadas de forma assíncrona, por isso a releitura tem de esperar um curto tempo de estabilização, e custa uma leitura extra por chamada. A Repull fá-lo por defeito e indica um de quatro estados: verified, unverified (a releitura foi saltada ou não estava disponível — desconhecido, não aplicado), mismatch (com as datas e o que o Booking.com tem em vez disso) ou rejected. Passa verify: false para um carregamento longo que vás reconciliar à parte.

Intervalos de datas, e a noite que perdes

Por baixo, o XML de disponibilidade e tarifas recebe um intervalo cuja data to não é escrita— é um limite exclusivo, tal como a data de saída exclui a última noite. A maioria dos calendários que já integraste trata as duas pontas como noites. Por isso a leitura natural de “1 a 7 de agosto” são sete noites, mas no pedido são seis, e a noite que perdes sem dares por isso é a última de cada intervalo que escreves.

É uma conversão de uma linha e um bug de uma semana, porque só te custa a última noite: o calendário parece mais ou menos certo, uma verificação rápida passa e a falha aparece como uma reserva perdida em vez de um erro.

Escolhe uma convenção e converte na fronteira

A superfície da Repull é inclusiva nas duas pontas — em tarifas, disponibilidade e restrições — por isso start igual a end é exatamente uma noite, e 2026-11-04 a 2026-11-07 são quatro noites. A conversão para o formato exclusivo acontece uma única vez, por dentro, para não poder falhar em cada chamada. Seja o que for que construas, faz essa escolha uma vez e não endpoint a endpoint.

O inventário é uma escrita à parte

Pôr preço numa noite não a abre para venda, e abri-la não lhe põe preço. Os quartos à venda e o fecho de vendas são um tipo de atualização próprio; enviá-los numa atualização de tarifas é recusado em vez de ignorado em silêncio.

# Close a night: zero rooms to sell, stop-sell on
curl -X PUT 'https://api.repull.dev/v1/channels/booking/availability' \
  -H 'Authorization: Bearer sk_live_YOUR_KEY' \
  -H 'Content-Type: application/json' \
  -d '{
    "type": "availability",
    "property_id": "1234567",
    "updates": [{
      "roomId": "123456701",
      "rateId": "98765",
      "dateRange": { "start": "2026-11-04", "end": "2026-11-04" },
      "availableRooms": 0,
      "closed": true
    }]
  }'

Detalhes em Enviar disponibilidade para o Booking.com. Se preferires escrever um calendário uma vez e fazê-lo chegar a todos os canais ligados, isso é PUT /v1/availability/{propertyId}, com PATCH /v1/availability/batch para muitas propriedades de uma vez.

Restrições que existem, e outras que não

Estadia mínima e máxima (por data de estadia e por data de chegada), chegada fechada e saída fechada existem e podem ser definidas por quarto, plano tarifário e intervalo de datas.

Várias restrições que as pessoas esperam simplesmente não estão na notificação que o Booking.com aceita, entre elas uma duração exata de estadia na chegada e a antecedência mínima ou máxima de reserva. O comportamento certo é recusá-las de forma visível. Uma restrição aceite e depois não enviada é a única falha que não consegues ver numa resposta, por isso a Repull responde 422 a indicar o campo em vez de o descartar. Vê restriction_not_supported e Estadia mínima e restrições.

Reservas, mensagens, avaliações e encargos

A matriz de capacidades põe o Airbnb e o Booking.com lado a lado, e marca o parcial como parcial em vez de o arredondar para cima.

Porque é que a Content API devolve 403?

Porque o conteúdo é uma superfície de produto própria, com a sua própria permissão e o seu próprio caminho base, separada da disponibilidade, das tarifas e das reservas. Uma propriedade pode estar totalmente ativa — a receber reservas e a aceitar todas as escritas de tarifas e disponibilidade que envias — enquanto cada chamada de conteúdo para essa mesma propriedade responde 403.

Quando acontece, o instinto é suspeitar do token, depois do id da propriedade e depois das permissões do anfitrião na Extranet. Normalmente não é nada disso. A capacidade não te foi concedida para essa superfície, e voltar a ligar não muda nada. Confirma que capacidades a tua parceria inclui de facto antes de meteres a gestão de fotos ou descrições numa versão.

O conteúdo, onde está disponível, cobre fotos, descrições, comodidades, instalações e políticas, ao nível da propriedade ou do quarto, e o Booking.com revê as alterações de texto antes de as publicar, por isso uma escrita é o início de um processo, não o fim. Conteúdo e fotos.

O que custa construir isto por conta própria

  1. Designação como parceiro e certificação. Meses, com análise comercial e uma certificação técnica por superfície. Não podes prometer uma data a nenhum cliente.
  2. Um modelo de segurança com credencial partilhada. Uma única conta de máquina para todas as propriedades que serves. Rotação, armazenamento e um classificador de erros cuidadoso o suficiente para que um 401 global durante uma falha não desligue os teus clientes em massa.
  3. O modelo e a associação. De propriedades a quartos, a planos tarifários e aos teus próprios anúncios, incluindo propriedades com vários quartos, unidades republicadas e quartos sem associação cujas reservas não têm para onde ir.
  4. Verificação das escritas. Como o recibo não prova nada, uma integração correta volta a ler e reconcilia. É mais uma chamada, um tempo de espera e uma máquina de estados, no caminho mais quente que tens.
  5. Convenções que não batem certo. Limites de datas exclusivos, preços ligados à ocupação, inventário separado das tarifas, restrições que não existem, XML onde esperavas JSON.
  6. Falhas contínuas. Igual a qualquer API de parceiros: nunca chega a zero.

Em resumo, com honestidade: o Booking.com é uma integração mais pesada do que o Airbnb e não partilha quase nenhum dos seus pressupostos — outro modelo de autenticação, outro modelo de dados, outra semântica de datas, outra definição de escrita bem-sucedida. As equipas que acabaram de terminar o Airbnb subestimam-no sempre. O guia da API do Airbnb é a comparação.

Onde entra a Repull

A Repull é uma API REST e uma só chave para Booking.com, Airbnb, Vrbo, Plum Guide e os sistemas de gestão de propriedades que os anfitriões já usam. Nós tratamos das relações com os parceiros; as propriedades ligam-se sozinhas através de um fluxo alojado com a tua marca.

Começa pelo guia de início rápido, ou lê a visão geral dos canais. Se és uma plataforma a integrar isto para os teus próprios clientes, e não para ti, o guia para plataformas cobre esse modelo pergunta a pergunta.

Se as propriedades que estás a integrar já estão num sistema de gestão de propriedades, esse é um segundo problema, separado: um PMS dá-te a sua própria visão de uma reserva, não a API do canal. Os guias de Guesty, Hostaway, Hospitable, Lodgify e OwnerRez explicam o que cada um expõe, e a matriz de cobertura tem-nos todos. Uma só chave cobre ao mesmo tempo uma ligação a um PMS e uma ligação direta a um canal.

Perguntas frequentes

Como obtenho acesso à API do Booking.com?

O Booking.com dá acesso à API a fornecedores de conectividade designados, não a integradores individuais. Uma empresa candidata-se, é avaliada e recebe credenciais para uma conta de máquina que fala com o Booking.com em nome de muitas propriedades. Depois, cada propriedade tem de ligar esse fornecedor a partir da sua própria Extranet antes de a conta de máquina a conseguir ver. A designação como parceiro é um processo comercial que se mede em meses; o passo de ligação por propriedade demora cerca de cinco minutos ao anfitrião.

Porque é que a minha atualização de preço no Booking.com não fez nada?

Quase sempre porque o valor indicava uma ocupação a que esse plano tarifário não atribui preço. O Booking.com não guarda o preço de uma noite; guarda o preço de uma noite para um número de pessoas num plano tarifário. Envia uma ocupação acima do máximo com preço no plano e o Booking.com aceita o pedido e descarta o valor sem dizer nada: a noite fica com o que tinha, muitas vezes 0.00, e a confirmação é idêntica à de uma escrita bem-sucedida. Envia uma abaixo e recebes um 400. Lê a ocupação do plano tarifário a partir do Booking.com em vez de assumires a capacidade do teu próprio anúncio.

Uma escrita de tarifas no Booking.com confirma que o preço está publicado?

Não. O Booking.com costuma responder a uma escrita de tarifas com uma simples confirmação cujo corpo é literalmente {"ok": ""}. É um recibo do pedido, não a confirmação do preço. A única forma de saber é voltar a ler as datas depois e comparar. A Repull faz essa releitura por defeito e indica verificado, não verificado, discrepância ou rejeitado em vez de afirmar que todas as atualizações foram aplicadas.

Porque é que a minha última noite não é atualizada no Booking.com?

Porque o intervalo de datas do XML subjacente não inclui a data final, enquanto a maioria dos calendários que já integraste a inclui. Envia de 1 a 7 de agosto à espera de sete noites e escreves seis. Decide que convenção a tua própria API expõe e converte uma única vez, na fronteira. A Repull expõe um intervalo inclusivo nas duas pontas (início igual ao fim é exatamente uma noite) e faz a conversão internamente.

Porque é que a Content API do Booking.com devolve 403 se as reservas funcionam?

Porque as capacidades são concedidas separadamente. O conteúdo está numa superfície de produto própria, com a sua própria permissão, por isso uma propriedade pode estar totalmente ativa para reservas, disponibilidade e tarifas enquanto cada chamada de conteúdo responde 403. Não é um problema de token nem de id de propriedade, e voltar a ligar não muda nada: a capacidade tem de estar ativada para o parceiro e para a propriedade.

Quanto custa uma integração com o Booking.com?

O Booking.com não cobra pela conectividade em si; o custo está na designação como parceiro, no desenvolvimento e em operar a integração. Para saberes quanto custa uma integração através da Repull, escreve para hello@repull.dev com o número de propriedades e os canais de que precisas e fazemos-te uma proposta.

Fala connosco sobre o acesso ao Booking.com

Conta-nos quantas propriedades contas ligar, de que superfícies precisas — tarifas, conteúdo, mensagens, dados financeiros — e o que mais estás a ligar ao lado do Booking.com. Respondemos com a forma da integração e quanto custa.