Referência da API
Hotéis Busca, pré-reserva e reserva de hospedagem com disponibilidade em tempo real
Busque hotéis e hospedagens com disponibilidade e preços em tempo real, e crie reservas com pagamento integrado.
Para realizar uma reserva de hotel via API, siga este fluxo de 5 etapas:
Buscar destinos — Use o autocomplete para encontrar o código da cidade
Buscar hotéis — Pesquise hotéis disponíveis com o código da cidade e datas
Detalhes do hotel (opcional) — Obtenha descrição completa, fotos, facilidades
Pré-reservar (Prebook) — Valide a oferta e reserve temporariamente por 20 minutos
Confirmar reserva (Book) — Envie os dados dos hóspedes e pagamento para criar a reserva
GET /api/v1/hotels/destinations → cityCode
POST /api/v1/hotels/search → hotels[] com ofertas
POST /api/v1/hotels/details → detalhes, fotos, facilidades
POST /api/v1/hotels/prebook → prebook_token (20 min)
POST /api/v1/hotels/book → booking + pagamento
Os resultados da busca têm validade limitada (~20 minutos). Complete o fluxo de prebook e book dentro desse período para garantir preço e disponibilidade.
GET /api/v1/hotels/destinations
Busca cidades/destinos disponíveis por nome. Retorna códigos de cidade que devem ser usados como cityCode na busca de hotéis.
Autenticação obrigatória: Requer API key no header Authorization.
Parâmetro Tipo Obrigatório Descrição qstring Sim Termo de busca (mínimo 2 caracteres). Ex: rio de janeiro, paris limitnumber Não Máximo de resultados (padrão: 10, máx: 50)
cURL JavaScript Python
curl -X GET "https://app.moblix.net/api/v1/hotels/destinations?q=rio+de+janeiro&limit=5" \
-H "Authorization: Bearer YOUR_API_KEY" const response = await fetch (
'https://app.moblix.net/api/v1/hotels/destinations?q=rio+de+janeiro&limit=5' ,
{
headers: {
'Authorization' : 'Bearer YOUR_API_KEY'
}
}
);
const data = await response. json ();
console. log (data.data.destinations); import requests
response = requests.get(
'https://app.moblix.net/api/v1/hotels/destinations' ,
params = { 'q' : 'rio de janeiro' , 'limit' : 5 },
headers = { 'Authorization' : 'Bearer YOUR_API_KEY' }
)
data = response.json()
print (data[ 'data' ][ 'destinations' ])
{
"data" : {
"destinations" : [
{
"code" : "1650" ,
"label" : "Rio De Janeiro, Brasil" ,
"city" : "Rio De Janeiro" ,
"country" : "Brasil" ,
"countryCode" : "BR" ,
"value" : "1650 - Rio De Janeiro"
},
{
"code" : "2933" ,
"label" : "Rio De Janeiro-galeao Airport, Brasil" ,
"city" : "Rio De Janeiro-galeao Airport" ,
"country" : "Brasil" ,
"countryCode" : "BR" ,
"value" : "2933 - Rio De Janeiro-galeao Airport"
}
],
"count" : 2 ,
"query" : "Rio de Janeiro"
},
"timestamp" : "2026-02-19T15:50:18.451Z"
}
Campo Tipo Descrição codestring Código da cidade (usar como cityCode na busca) labelstring Nome formatado para exibição citystring Nome da cidade countrystring Nome do país countryCodestring Código do país (ISO 2) valuestring Valor combinado código + nome
POST /api/v1/hotels/search
Realiza uma busca de hotéis disponíveis para as datas especificadas.
{
"cityCode" : "1650" ,
"checkIn" : "2026-03-15" ,
"checkOut" : "2026-03-20" ,
"adults" : 2 ,
"children" : 0 ,
"rooms" : 1 ,
"nationality" : "BR"
}
Campo Tipo Obrigatório Descrição cityCodestring Condicional Código da cidade (obtido via autocomplete de destinos). Obrigatório se hotelIds não for informado hotelIdsstring[] Condicional Lista de IDs de hotéis para busca específica (máx. 500). Obrigatório se cityCode não for informado checkInstring Sim Data de entrada no formato YYYY-MM-DD checkOutstring Sim Data de saída no formato YYYY-MM-DD adultsnumber Sim Número total de adultos (1-9) childrennumber Não Número total de crianças (padrão: 0) roomsnumber Não Número de quartos (1-5, padrão: 1) nationalitystring Não Nacionalidade dos hóspedes, código ISO 2 letras (padrão: BR)
Pelo menos um de cityCode ou hotelIds deve ser informado. O cityCode é um código numérico do fornecedor, não o nome da cidade. Use o endpoint de Buscar Destinos para obter o código correto. O hotelIds aceita IDs de hotéis do provedor (campo hotelId da resposta do search).
cURL JavaScript Python
curl -X POST https://app.moblix.net/api/v1/hotels/search \
-H "Authorization: Bearer mbx_live_sua_chave_aqui" \
-H "Content-Type: application/json" \
-d '{
"cityCode": "1650",
"checkIn": "2026-03-15",
"checkOut": "2026-03-20",
"adults": 2,
"rooms": 1
}' const response = await fetch ( 'https://app.moblix.net/api/v1/hotels/search' , {
method: 'POST' ,
headers: {
'Authorization' : 'Bearer mbx_live_sua_chave_aqui' ,
'Content-Type' : 'application/json'
},
body: JSON . stringify ({
cityCode: '1650' ,
checkIn: '2026-03-15' ,
checkOut: '2026-03-20' ,
adults: 2 ,
rooms: 1
})
});
const data = await response. json ();
console. log (data.data.hotels); import requests
response = requests.post(
'https://app.moblix.net/api/v1/hotels/search' ,
headers = {
'Authorization' : 'Bearer mbx_live_sua_chave_aqui' ,
'Content-Type' : 'application/json'
},
json = {
'cityCode' : '1650' ,
'checkIn' : '2026-03-15' ,
'checkOut' : '2026-03-20' ,
'adults' : 2 ,
'rooms' : 1
}
)
data = response.json()
print (data[ 'data' ][ 'hotels' ])
{
"data" : {
"hotels" : [
{
"id" : "bestbuy:6931" ,
"name" : "BELMOND COPACABANA PALACE" ,
"hotelId" : "6931" ,
"hotelSearchCode" : "20608180/3661045776465014655/1022" ,
"location" : {
"address" : "COPACABANA" ,
"city" : "Rio De Janeiro" ,
"country" : "Brasil" ,
"countryCode" : "BR" ,
"coordinates" : {
"latitude" : -22.967413 ,
"longitude" : -43.178798
}
},
"rating" : 5 ,
"stars" : 5 ,
"images" : [
"https://i.travelapi.com/lodging/1000000/10000/7200/7130/b2fc212d_b.jpg" ,
"https://i.travelapi.com/lodging/1000000/10000/7200/7130/b2fc212d_t.jpg"
],
"amenities" : [],
"price" : {
"amount" : 4081.00 ,
"currency" : "BRL" ,
"perNight" : true ,
"total" : 12243.00
},
"availability" : {
"checkIn" : "2026-03-15" ,
"checkOut" : "2026-03-18" ,
"nights" : 3 ,
"roomsAvailable" : 1
},
"description" : "IF YOU FAIL TO CHECK-IN FOR THIS RESERVATION..." ,
"provider" : "BestBuy Travel" ,
"offersCount" : 1 ,
"offers" : [
{
"hotelSearchCode" : "20608180/3661045776465014655/1022" ,
"roomBasis" : "BB" ,
"rooms" : [ "Superior City View Room" ],
"totalPrice" : 12243.00 ,
"netPrice" : 11243.00 ,
"currency" : "BRL" ,
"nonRefundable" : false ,
"cancellationDeadline" : "2026-03-13"
}
],
"searchSessionId" : "a8ee0a39-24f5-4e9c-a622-6fc80101fb4e" ,
"netPrice" : 11243.00
}
],
"summary" : {
"totalResults" : 167 ,
"minPrice" : 482.33 ,
"maxPrice" : 4870.00 ,
"duration" : 16077
},
"searchSessionId" : "a8ee0a39-24f5-4e9c-a622-6fc80101fb4e" ,
"meta" : {
"searchParams" : {
"cityCode" : "1650" ,
"checkIn" : "2026-03-15" ,
"checkOut" : "2026-03-18" ,
"adults" : 2 ,
"children" : 0 ,
"rooms" : 1 ,
"nationality" : "BR"
},
"teamId" : "uuid-do-time"
}
},
"timestamp" : "2026-02-19T15:51:00.000Z"
}
Use o campo hotelSearchCode do hotel ou de uma oferta específica para obter detalhes (endpoint details) e para criar a pré-reserva (endpoint prebook). Cada hotel pode ter múltiplas ofertas com diferentes tipos de quarto e regime alimentar.
Campo Tipo Descrição idstring ID único no formato provider:hotelId namestring Nome do hotel hotelIdstring ID do hotel no provedor hotelSearchCodestring Código da melhor oferta (usar no prebook e details) locationLocation Endereço e coordenadas ratingnumber Categoria em estrelas (1-5) starsnumber Estrelas do hotel (1-5) imagesstring[] URLs das imagens do hotel (thumbnail e imagem principal). Para galeria completa, use o endpoint Details amenitiesstring[] Lista de comodidades (pode estar vazia na busca). Para lista completa, use o endpoint Details pricePrice Informações de preço da melhor oferta availabilityAvailability Disponibilidade e datas descriptionstring Descrição ou observações do hotel providerstring Nome do fornecedor offersCountnumber Número de ofertas/quartos disponíveis offersOffer[] Lista de todas as ofertas disponíveis para este hotel searchSessionIdstring ID da sessão de busca (usar no prebook) netPricenumber Preço de custo da melhor oferta (antes do markup)
Campo Tipo Descrição addressstring Endereço do hotel citystring Nome da cidade countrystring Nome do país countryCodestring Código do país (ISO 2) coordinatesobject latitude e longitude
Campo Tipo Descrição hotelSearchCodestring Código da oferta (usar no prebook para esta oferta específica) roomBasisstring Regime alimentar: RO (Room Only), BB (Bed & Breakfast), HB (Half Board), FB (Full Board), AI (All Inclusive) roomsstring[] Tipos de quarto disponíveis totalPricenumber Preço total da estadia (com markup) netPricenumber Preço de custo (antes do markup) currencystring Moeda nonRefundableboolean Se a oferta é não-reembolsável cancellationDeadlinestring|null Data limite para cancelamento gratuito (YYYY-MM-DD)
Campo Tipo Descrição amountnumber Preço por diária (melhor oferta) currencystring Moeda (BRL) perNightboolean Sempre true — indica que amount é por diária totalnumber Preço total da estadia (melhor oferta)
Campo Tipo Descrição checkInstring Data de check-in checkOutstring Data de check-out nightsnumber Número de diárias roomsAvailablenumber Quantidade de ofertas disponíveis
Campo Tipo Descrição totalResultsnumber Total de hotéis encontrados minPricenumber Menor preço por diária maxPricenumber Maior preço por diária durationnumber Tempo da busca em milissegundos
POST /api/v1/hotels/details
Retorna informações detalhadas de um hotel específico, incluindo descrição completa, galeria de fotos, facilidades do hotel e do quarto, e breakdown de preços.
Este endpoint é opcional mas recomendado. Use-o para montar a página de detalhes do hotel antes do usuário selecionar uma oferta para reservar.
Campo Tipo Obrigatório Descrição hotel_search_codestring Sim Código da oferta retornado na busca (hotelSearchCode) hotel_idstring Não ID do hotel no provedor (para informações adicionais) languagestring Não Idioma da resposta (padrão: pt). Opções: pt, en, es
cURL JavaScript Python
curl -X POST https://app.moblix.net/api/v1/hotels/details \
-H "Authorization: Bearer mbx_live_sua_chave_aqui" \
-H "Content-Type: application/json" \
-d '{
"hotel_search_code": "HSC-ABCDEF123456",
"hotel_id": "12345",
"language": "pt"
}' const response = await fetch ( 'https://app.moblix.net/api/v1/hotels/details' , {
method: 'POST' ,
headers: {
'Authorization' : 'Bearer mbx_live_sua_chave_aqui' ,
'Content-Type' : 'application/json'
},
body: JSON . stringify ({
hotel_search_code: 'HSC-ABCDEF123456' ,
hotel_id: '12345' ,
language: 'pt'
})
});
const data = await response. json ();
console. log (data.data.hotel_name);
console. log (data.data.pictures); // Galeria de fotos
console. log (data.data.facilities); // Facilidades do hotel
console. log (data.data.description); // Descrição completa import requests
response = requests.post(
'https://app.moblix.net/api/v1/hotels/details' ,
headers = {
'Authorization' : 'Bearer mbx_live_sua_chave_aqui' ,
'Content-Type' : 'application/json'
},
json = {
'hotel_search_code' : 'HSC-ABCDEF123456' ,
'hotel_id' : '12345' ,
'language' : 'pt'
}
)
data = response.json()
print (data[ 'data' ][ 'hotel_name' ])
print (data[ 'data' ][ 'pictures' ])
print (data[ 'data' ][ 'facilities' ])
{
"data" : {
"hotel_name" : "Copacabana Palace, A Belmond Hotel, Rio de Janeiro" ,
"hotel_id" : "6931" ,
"address" : "Avenida Atlantica, 1702, Rio de Janeiro, BR" ,
"city_code" : "1650" ,
"phone" : "55-21-25487070" ,
"stars" : 5 ,
"description" : "Property Location Copacabana Palace, A Belmond Hotel ficará numa localização central em Rio de Janeiro, a poucos passos de Praia de Copacabana..." ,
"facilities" : [
"Piscina ao ar livre" ,
"Spa com serviço completo" ,
"Restaurante" ,
"Bar/lounge" ,
"Centro de fitness" ,
"Wi-fi grátis" ,
"Estacionamento (sobretaxa)" ,
"Serviço de quarto 24 horas" ,
"Concierge"
],
"room_facilities" : [
"Ar condicionado" ,
"Televisor LCD" ,
"Cofre no quarto" ,
"Mini bar" ,
"Secador de cabelo" ,
"Toalhas fornecidas" ,
"Roupão de banho"
],
"pictures" : [
"https://i.travelapi.com/lodging/1000000/10000/7200/7130/b2fc212d_b.jpg" ,
"https://i.travelapi.com/lodging/1000000/10000/7200/7130/667c0367_b.jpg" ,
"https://i.travelapi.com/lodging/1000000/10000/7200/7130/dd513758_b.jpg" ,
"https://i.travelapi.com/lodging/1000000/10000/7200/7130/abc12345_b.jpg" ,
"..."
],
"coordinates" : null ,
"price_breakdown" : {
"HotelName" : "Copacabana Palace, A Belmond Hotel" ,
"Room" : { "..." : "detalhamento por diária" }
}
},
"timestamp" : "2026-02-19T15:52:00.000Z"
}
As coordenadas geográficas são retornadas no endpoint de busca (search). No endpoint de detalhes, coordinates pode ser null dependendo do provedor. Use as coordenadas obtidas na busca para posicionar o hotel no mapa.
Campo Tipo Descrição hotel_namestring Nome do hotel hotel_idstring ID do hotel no provedor addressstring Endereço completo city_codestring Código da cidade phonestring Telefone do hotel starsnumber Classificação em estrelas (1-5) descriptionstring Descrição detalhada do hotel (texto limpo, sem HTML) facilitiesstring[] Lista de facilidades/amenidades do hotel room_facilitiesstring[] Lista de facilidades do quarto picturesstring[] URLs das fotos do hotel (galeria completa) coordinatesobject|null latitude e longitude. Pode ser null — use as coordenadas do endpoint de busca quando disponíveisprice_breakdownobject Detalhamento de preços por diária
HTTP Erro Descrição 400 Validation error Campos obrigatórios faltando 400 Provider credentials not configured Credenciais não configuradas 401 Unauthorized API key inválida 500 Provider password not found Erro ao decriptar senha
POST /api/v1/hotels/prebook
Valida a disponibilidade de uma oferta de hotel e a reserva temporariamente por 20 minutos . Retorna um prebook_token que deve ser usado no próximo passo para confirmar a reserva.
O prebook_token expira em 20 minutos. Após esse prazo, será necessário criar um novo prebook.
Campo Tipo Obrigatório Descrição hotel_search_codestring Sim Código da oferta retornado na busca (campo hotelSearchCode da oferta) search_session_idstring Não ID da sessão de busca (searchSessionId da resposta do search) check_instring Sim Data de check-in (YYYY-MM-DD) check_outstring Sim Data de check-out (YYYY-MM-DD) adultsnumber Sim Número de adultos (1-9) childrennumber Não Número de crianças (padrão: 0) roomsnumber Não Número de quartos (1-5, padrão: 1) room_basisstring Não Tipo de quarto (retornado na oferta) hotel_namestring Sim Nome do hotel hotel_idstring Não ID do hotel (campo id da resposta do search) unit_pricenumber Sim Preço total da estadia (campo price.total do search) currencystring Não Moeda, 3 caracteres (padrão: BRL) net_pricenumber Não Preço de custo/net (para cálculo de markup)
cURL JavaScript Python
curl -X POST https://app.moblix.net/api/v1/hotels/prebook \
-H "Authorization: Bearer mbx_live_sua_chave_aqui" \
-H "Content-Type: application/json" \
-d '{
"hotel_search_code": "HSC-ABCDEF123456",
"search_session_id": "uuid-da-sessao",
"check_in": "2026-03-15",
"check_out": "2026-03-20",
"adults": 2,
"rooms": 1,
"hotel_name": "Copacabana Palace",
"hotel_id": "bestbuy:12345",
"unit_price": 4500.00,
"currency": "BRL"
}' const response = await fetch ( 'https://app.moblix.net/api/v1/hotels/prebook' , {
method: 'POST' ,
headers: {
'Authorization' : 'Bearer mbx_live_sua_chave_aqui' ,
'Content-Type' : 'application/json'
},
body: JSON . stringify ({
hotel_search_code: 'HSC-ABCDEF123456' ,
search_session_id: 'uuid-da-sessao' ,
check_in: '2026-03-15' ,
check_out: '2026-03-20' ,
adults: 2 ,
rooms: 1 ,
hotel_name: 'Copacabana Palace' ,
hotel_id: 'bestbuy:12345' ,
unit_price: 4500.00 ,
currency: 'BRL'
})
});
const data = await response. json ();
const prebookToken = data.data.prebook_token;
// Salve este token para usar no próximo passo (book) import requests
response = requests.post(
'https://app.moblix.net/api/v1/hotels/prebook' ,
headers = {
'Authorization' : 'Bearer mbx_live_sua_chave_aqui' ,
'Content-Type' : 'application/json'
},
json = {
'hotel_search_code' : 'HSC-ABCDEF123456' ,
'search_session_id' : 'uuid-da-sessao' ,
'check_in' : '2026-03-15' ,
'check_out' : '2026-03-20' ,
'adults' : 2 ,
'rooms' : 1 ,
'hotel_name' : 'Copacabana Palace' ,
'hotel_id' : 'bestbuy:12345' ,
'unit_price' : 4500.00 ,
'currency' : 'BRL'
}
)
data = response.json()
prebook_token = data[ 'data' ][ 'prebook_token' ]
# Salve este token para usar no próximo passo (book)
{
"data" : {
"prebook_token" : "pbk_a1b2c3d4-e5f6-7890-abcd-ef1234567890" ,
"hotel_name" : "Copacabana Palace" ,
"check_in" : "2026-03-15" ,
"check_out" : "2026-03-20" ,
"nights" : 5 ,
"unit_price" : 4500.00 ,
"currency" : "BRL" ,
"expires_at" : "2026-01-26T10:50:00Z"
},
"timestamp" : "2026-01-26T10:30:00Z"
}
Campo Tipo Descrição prebook_tokenstring Token para usar no endpoint de book (válido por 20 min) hotel_namestring Nome do hotel check_instring Data de check-in check_outstring Data de check-out nightsnumber Número de diárias unit_pricenumber Preço total confirmado currencystring Moeda expires_atstring Data/hora de expiração do token (ISO 8601)
HTTP Erro Descrição 400 Validation error Campos obrigatórios faltando ou inválidos 400 check_in must be before check_out Datas inválidas 400 Provider credentials not configured Credenciais do provedor não configuradas 401 Unauthorized API key inválida
Cria a reserva de hotel definitiva a partir de um prebook_token, com dados dos hóspedes e pagamento integrado.
Campo Tipo Obrigatório Descrição prebook_tokenstring Sim Token obtido no prebook customer_idstring (UUID) Sim ID do cliente cadastrado na sua equipe guestsarray Sim Lista de hóspedes (mín. 1) paymentobject Sim Dados de pagamento notesstring Não Observações internas special_requestsstring Não Solicitações especiais (ex: "check-in tardio")
Campo Tipo Obrigatório Descrição first_namestring Sim Nome last_namestring Sim Sobrenome document_typestring Não Tipo: cpf, passport, rg document_numberstring Não Número do documento emailstring Não E-mail do hóspede phonestring Não Telefone birth_datestring Não Data de nascimento (YYYY-MM-DD)
Campo Tipo Obrigatório Descrição methodstring Sim Método: pix, credit_card, boleto installmentsnumber Não Parcelas (1-12, apenas cartão de crédito) credit_cardobject Condicional Obrigatório quando method = credit_card credit_card_holder_infoobject Não Endereço do titular (recomendado para cartão)
Campo Tipo Obrigatório Descrição holder_namestring Sim Nome impresso no cartão numberstring Sim Número do cartão expiry_monthstring Sim Mês de validade (2 dígitos, ex: "03") expiry_yearstring Sim Ano de validade (4 dígitos, ex: "2028") ccvstring Sim Código de segurança (3-4 dígitos)
Campo Tipo Obrigatório Descrição namestring Sim Nome completo do titular emailstring Sim E-mail do titular cpf_cnpjstring Sim CPF ou CNPJ do titular postal_codestring Sim CEP (8 dígitos) address_numberstring Sim Número do endereço phonestring Não Telefone address_streetstring Não Rua address_complementstring Não Complemento address_neighborhoodstring Não Bairro address_citystring Não Cidade address_statestring Não Estado (UF)
cURL JavaScript Python
curl -X POST https://app.moblix.net/api/v1/hotels/book \
-H "Authorization: Bearer mbx_live_sua_chave_aqui" \
-H "Content-Type: application/json" \
-d '{
"prebook_token": "pbk_a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"customer_id": "uuid-do-cliente",
"guests": [
{
"first_name": "João",
"last_name": "Silva",
"document_type": "cpf",
"document_number": "12345678900",
"email": "joao@example.com",
"phone": "+5511999999999"
},
{
"first_name": "Maria",
"last_name": "Silva",
"document_type": "cpf",
"document_number": "98765432100"
}
],
"payment": {
"method": "pix"
},
"special_requests": "Check-in após as 18h"
}' const response = await fetch ( 'https://app.moblix.net/api/v1/hotels/book' , {
method: 'POST' ,
headers: {
'Authorization' : 'Bearer mbx_live_sua_chave_aqui' ,
'Content-Type' : 'application/json'
},
body: JSON . stringify ({
prebook_token: 'pbk_a1b2c3d4-e5f6-7890-abcd-ef1234567890' ,
customer_id: 'uuid-do-cliente' ,
guests: [
{
first_name: 'João' ,
last_name: 'Silva' ,
document_type: 'cpf' ,
document_number: '12345678900' ,
email: 'joao@example.com' ,
phone: '+5511999999999'
},
{
first_name: 'Maria' ,
last_name: 'Silva' ,
document_type: 'cpf' ,
document_number: '98765432100'
}
],
payment: {
method: 'pix'
},
special_requests: 'Check-in após as 18h'
})
});
const data = await response. json ();
console. log ( 'Reserva:' , data.data.booking.booking_number);
console. log ( 'PIX:' , data.data.payment.pix_code); import requests
response = requests.post(
'https://app.moblix.net/api/v1/hotels/book' ,
headers = {
'Authorization' : 'Bearer mbx_live_sua_chave_aqui' ,
'Content-Type' : 'application/json'
},
json = {
'prebook_token' : 'pbk_a1b2c3d4-e5f6-7890-abcd-ef1234567890' ,
'customer_id' : 'uuid-do-cliente' ,
'guests' : [
{
'first_name' : 'João' ,
'last_name' : 'Silva' ,
'document_type' : 'cpf' ,
'document_number' : '12345678900' ,
'email' : 'joao@example.com' ,
'phone' : '+5511999999999'
},
{
'first_name' : 'Maria' ,
'last_name' : 'Silva' ,
'document_type' : 'cpf' ,
'document_number' : '98765432100'
}
],
'payment' : {
'method' : 'pix'
},
'special_requests' : 'Check-in após as 18h'
}
)
data = response.json()
print ( 'Reserva:' , data[ 'data' ][ 'booking' ][ 'booking_number' ])
print ( 'PIX:' , data[ 'data' ][ 'payment' ][ 'pix_code' ])
{
"prebook_token" : "pbk_a1b2c3d4-e5f6-7890-abcd-ef1234567890" ,
"customer_id" : "uuid-do-cliente" ,
"guests" : [
{
"first_name" : "João" ,
"last_name" : "Silva" ,
"document_type" : "cpf" ,
"document_number" : "12345678900"
}
],
"payment" : {
"method" : "credit_card" ,
"installments" : 3 ,
"credit_card" : {
"holder_name" : "JOAO SILVA" ,
"number" : "4111111111111111" ,
"expiry_month" : "12" ,
"expiry_year" : "2028" ,
"ccv" : "123"
},
"credit_card_holder_info" : {
"name" : "João Silva" ,
"email" : "joao@example.com" ,
"cpf_cnpj" : "12345678900" ,
"postal_code" : "22041080" ,
"address_number" : "1702" ,
"phone" : "+5511999999999"
}
}
}
{
"data" : {
"booking" : {
"id" : "uuid-da-reserva" ,
"booking_number" : "BK-1234567890" ,
"locator" : "ABC123" ,
"status" : "pending" ,
"total_amount" : 4500.00 ,
"currency" : "BRL"
},
"payment" : {
"id" : "uuid-do-pagamento" ,
"method" : "pix" ,
"amount" : 4500.00 ,
"status" : "pending" ,
"pix_qr_code" : "data:image/png;base64,..." ,
"pix_code" : "00020126580014br.gov.bcb.pix..." ,
"expires_at" : "2026-01-26T11:30:00Z"
}
},
"timestamp" : "2026-01-26T10:30:00Z"
}
{
"data" : {
"booking" : {
"id" : "uuid-da-reserva" ,
"booking_number" : "BK-1234567890" ,
"locator" : "ABC123" ,
"status" : "confirmed" ,
"total_amount" : 4500.00 ,
"currency" : "BRL"
},
"payment" : {
"id" : "uuid-do-pagamento" ,
"method" : "credit_card" ,
"amount" : 4500.00 ,
"status" : "paid"
}
},
"timestamp" : "2026-01-26T10:30:00Z"
}
Pagamentos com cartão de crédito são confirmados imediatamente (status: "confirmed"). Para PIX e boleto , a reserva fica como pending até o pagamento ser confirmado via webhook.
Campo Tipo Descrição idstring UUID da reserva booking_numberstring Número da reserva (ex: BK-1234567890) locatorstring Localizador da reserva (código curto) statusstring pending (aguardando pagamento) ou confirmed (pago)total_amountnumber Valor total currencystring Moeda
Campo Tipo Descrição idstring UUID do pagamento methodstring Método utilizado amountnumber Valor cobrado statusstring pending ou paidpix_qr_codestring QR Code PIX em base64 (apenas para PIX) pix_codestring Código PIX copia-e-cola (apenas para PIX) boleto_urlstring URL do boleto PDF (apenas para boleto) payment_urlstring URL de pagamento (quando disponível) expires_atstring Expiração do pagamento (ISO 8601)
HTTP Erro Descrição 400 Validation error Campos obrigatórios faltando ou inválidos 400 credit_card data is required Faltam dados do cartão 400 Prebook token already used Token já foi utilizado 400 No payment provider configured Nenhum gateway suporta o método 404 Prebook token not found Token não encontrado 404 Customer not found Cliente não pertence ao time 410 Prebook token expired Token expirou (criar novo prebook)
Aqui está um exemplo completo de integração, do início ao fim:
const API_URL = 'https://app.moblix.net' ;
const API_KEY = 'mbx_live_sua_chave_aqui' ;
const headers = {
'Authorization' : `Bearer ${ API_KEY }` ,
'Content-Type' : 'application/json'
};
// Passo 1: Buscar código da cidade
const destResult = await fetch (
`${ API_URL }/api/v1/hotels/destinations?q=rio+de+janeiro` ,
{ headers }
). then ( r => r. json ());
const cityCode = destResult.data.destinations[ 0 ].code; // "1650"
// Passo 2: Buscar hotéis disponíveis
const searchResult = await fetch ( `${ API_URL }/api/v1/hotels/search` , {
method: 'POST' ,
headers,
body: JSON . stringify ({
cityCode,
checkIn: '2026-03-15' ,
checkOut: '2026-03-20' ,
adults: 2 ,
rooms: 1
})
}). then ( r => r. json ());
const hotel = searchResult.data.hotels[ 0 ];
// hotel.hotelSearchCode → código para usar no details e prebook
// hotel.offers → lista de todas as ofertas disponíveis
// Passo 3 (opcional): Obter detalhes completos do hotel
const details = await fetch ( `${ API_URL }/api/v1/hotels/details` , {
method: 'POST' ,
headers,
body: JSON . stringify ({
hotel_search_code: hotel.hotelSearchCode,
hotel_id: hotel.hotelId,
language: 'pt'
})
}). then ( r => r. json ());
console. log ( 'Fotos:' , details.data.pictures);
console. log ( 'Facilidades:' , details.data.facilities);
// Passo 4: Pré-reservar o hotel (escolha uma oferta específica ou use a melhor)
const selectedOffer = hotel.offers[ 0 ]; // ou hotel.hotelSearchCode para a melhor
const prebook = await fetch ( `${ API_URL }/api/v1/hotels/prebook` , {
method: 'POST' ,
headers,
body: JSON . stringify ({
hotel_search_code: selectedOffer.hotelSearchCode,
search_session_id: hotel.searchSessionId,
check_in: '2026-03-15' ,
check_out: '2026-03-20' ,
adults: 2 ,
rooms: 1 ,
hotel_name: hotel.name,
hotel_id: hotel.id,
unit_price: selectedOffer.totalPrice
})
}). then ( r => r. json ());
// Passo 5: Confirmar reserva com pagamento
const booking = await fetch ( `${ API_URL }/api/v1/hotels/book` , {
method: 'POST' ,
headers,
body: JSON . stringify ({
prebook_token: prebook.data.prebook_token,
customer_id: 'uuid-do-cliente' ,
guests: [
{
first_name: 'João' ,
last_name: 'Silva' ,
document_type: 'cpf' ,
document_number: '12345678900' ,
email: 'joao@example.com'
}
],
payment: { method: 'pix' }
})
}). then ( r => r. json ());
console. log ( 'Reserva criada:' , booking.data.booking.booking_number);
console. log ( 'PIX para pagamento:' , booking.data.payment.pix_code);
Para a integração com BestBuy Travel , o pagamento é sempre processado no gateway de pagamento da sua agência (via PIX, cartão de crédito ou boleto configurado na Moblix). A BestBuy não processa pagamentos diretamente dos clientes.
Ao configurar as credenciais da BestBuy no painel, você pode escolher entre dois modos de emissão:
Cliente paga → Sistema cria reserva automaticamente na BestBuy → Faturamento
A reserva é criada automaticamente na BestBuy assim que o pagamento é confirmado
Você é faturado automaticamente pela BestBuy pela reserva criada
Cliente recebe confirmação imediata com voucher
Cliente paga → Pedido interno criado → Agente confirma manualmente → Reserva na BestBuy
A reserva fica como "Pendente de Confirmação" após o pagamento
Você decide manualmente quando confirmar no fornecedor pelo painel
Só é faturado quando você confirmar manualmente
O modo de emissão é configurado em Configurações → Integrações → Provedores de Hotéis no painel da Moblix.
Cliente paga na sua agência (via gateway Moblix)
Você recebe o valor integral do cliente
Fornecedor fatura você pela reserva (apenas no modo automático ou após confirmação manual)
Você é responsável por pagar o fornecedor conforme contrato comercial
Após criar uma reserva de hotel, você pode consultá-la e gerenciá-la pela API de Reservas :
Listar reservas — GET /api/v1/bookings?type=hotel
Buscar por ID — GET /api/v1/bookings/:id
Atualizar — PATCH /api/v1/bookings/:id
Cancelar — DELETE /api/v1/bookings/:id
Endpoint Limite /hotels/search30 req/min /hotels/details60 req/min /hotels/prebook60 req/min /hotels/book30 req/min