Plataforma aberta

API Hospy v1

API REST multi-tenant para qualquer PMS (Digisat e outros) publicar quartos, tarifas e inventário e receber as reservas do motor próprio e das OTAs conectadas.

1. API XML padrão HUNIT (PMS e OTAs)

Implementamos o mesmo contrato XML usado pelo mercado (HUNIT v14), o que permite integrar Digisat e outros PMS, além de Booking.com, Decolar, Expedia e Trivago, sem desenvolvimento específico. Autenticação por userName, password e hotelId dentro do corpo XML. Base URL: https://hospy.app.br/api/public/hunit.

POST/portal/readportalRQPortais (OTAs) habilitados para o hotel.
POST/roomrate/readroomRateRQTipos de UH e planos tarifários do hotel.
POST/availability/updateavailabilityRQDisponibilidade, tarifa, minStay/maxStay, closed, CTA/CTD e tarifa por ocupação.
POST/booking/readbookingRQReservas pendentes de importação no PMS.
POST/confirme/postconfirmeRQPMS confirma a importação e devolve o localizador interno.
POST/occupancyrate/updateoccupancyRateRQIndicadores diários: ocupação, diária média, receita e RevPAR.
curl -X POST https://hospy.app.br/api/public/hunit/availability/update \
  -H "Content-Type: application/xml" \
  --data '<?xml version="1.0" encoding="utf-8"?>
<availabilityRQ>
  <userName>digisat</userName>
  <password>SEGREDO</password>
  <hotelId>1024</hotelId>
  <updates>
    <update>
      <roomTypeId>suite-master</roomTypeId>
      <rateTypeId>STD</rateTypeId>
      <dateRange from="2026-09-10" to="2026-09-30" sat="true" sun="true" mon="true" tue="true" wed="true" thu="true" fri="true" />
      <availability>4</availability>
      <rate>780,0000</rate>
      <minStay>2</minStay>
      <closed>false</closed>
      <cta>false</cta>
      <ctd>false</ctd>
    </update>
  </updates>
</availabilityRQ>'

Sucesso responde <availabilityRS><success /></availabilityRS> e falhas retornam <errors><error>…</error></errors>.

2. API REST JSON (alternativa) — credenciais

Cada hotel gera sua própria chave em Painel → Integrações. A chave é exibida uma única vez e identifica o tenant — não é preciso enviar o id do hotel nas chamadas.

Authorization: Bearer hspk_live_xxxxxxxxxxxxxxxx
Content-Type: application/json

3. Endpoints REST

GET/room-typesLista os quartos do hotel autenticado (slug, capacidade, preços, unidades).
POST/room-typesCria ou atualiza um quarto (upsert por slug ou external_ref).
POST/ratesEnvia o tarifário por data: price, min_stay e closed por room_type e data.
POST/availabilityEnvia o inventário por data: total, sold e stop_sale. Base do anti-overbooking.
GET/reservations?since=&status=&channel=&limit=Puxa as reservas do motor e das OTAs a partir de um timestamp.
POST/reservations/{id}/ackConfirma que o PMS importou a reserva (acknowledged_at).

Base URL: https://hospy.app.br/api/public/v1

4. Enviar tarifas e inventário (REST)

curl -X POST https://hospy.app.br/api/public/v1/rates \
  -H "Authorization: Bearer $HOSPY_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "rates": [
      { "room_slug": "suite-master", "date": "2026-09-10", "price": 780.00, "min_stay": 2, "closed": false }
    ]
  }'

curl -X POST https://hospy.app.br/api/public/v1/availability \
  -H "Authorization: Bearer $HOSPY_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "availability": [
      { "room_slug": "suite-master", "date": "2026-09-10", "total": 4, "sold": 1, "stop_sale": false }
    ]
  }'

5. Receber reservas (pull)

curl "https://hospy.app.br/api/public/v1/reservations?since=2026-08-01T00:00:00Z&status=confirmed" \
  -H "Authorization: Bearer $HOSPY_KEY"

curl -X POST https://hospy.app.br/api/public/v1/reservations/<id>/ack \
  -H "Authorization: Bearer $HOSPY_KEY"

6. Webhooks (push)

Cadastre a URL do seu PMS no painel. A Hospy envia reservation.created, reservation.updated e reservation.cancelled assinados com HMAC-SHA256 no header X-Hospy-Signature. Valide sempre a assinatura com o secret exibido na criação do webhook.

POST /seu-endpoint
X-Hospy-Signature: sha256=<hmac do corpo bruto>

{ "event": "reservation.created", "tenant": "hotel-x", "data": { "code": "HSP-AB12CD", "...": "..." } }

7. Channel manager

Tarifas e inventário enviados pela API são a mesma fonte usada na distribuição para Booking.com, Airbnb, Expedia e Decolar. Reservas vindas das OTAs entram com o campo channel correspondente e descontam o inventário imediatamente, evitando overbooking entre motor próprio e OTAs.

Códigos de erro

  • 401 missing_api_key / invalid_api_key — chave ausente, revogada ou inválida.
  • 403 tenant_inactive — hotel desativado.
  • 400 invalid_query / invalid_body — payload fora do schema.
  • 404 not_found — recurso inexistente para o tenant.