API pública para hotéis e PMS

Documentação da API FNRH Digital

Integre reservas, hóspedes, check-in e check-out com o mesmo padrão usado por operações premium.

Base URL: https://fnrh.sisteminter.net/api/v1

Primeiros passos

  1. No painel, configure API de Integração.
  2. Copie X-Property-Id e X-Api-Key.
  3. Teste no Playground.
  4. Conecte seu PMS/ERP com os endpoints abaixo.

Autenticação obrigatória

X-Property-Id: SEU_PROPERTY_ID
X-Api-Key: SUA_CHAVE_API
Content-Type: application/json

Se retornar 401, confira header faltando, credencial incorreta ou integração desativada no painel.

Fluxo recomendado de integração

1. Criar/atualizar reserva
2. Sincronizar hóspedes
3. Marcar check-in
4. Marcar check-out

1) Criar/atualizar reserva

POST https://fnrh.sisteminter.net/api/v1/reservas

Cria uma reserva nova ou atualiza a existente quando o reservation_code ja existe.

CampoObrigatorioTipoFormatoExemplo
reservation_codeSimstringCodigo unico da reservaRES-2026-0001
arrival_dateSimdateYYYY-MM-DD ou DD/MM/YYYY2026-02-20
departure_dateSimdateYYYY-MM-DD ou DD/MM/YYYY2026-02-23
unitNaostringUnidade/quarto101
adultsNaointMinimo 12
childrenNaointMinimo 01
ota_sourceNaostringOrigem/canalBooking.com
travel_reasonNaostringLista de motivos aceitosLAZER_FERIAS
transport_typeNaostringLista de meios aceitosAUTOMOVEL
origin_cityNaostringCidade/UF origemSao Paulo/SP
destination_cityNaostringCidade/UF destinoRio de Janeiro/RJ
guest_nameSimstringTitularMaria Souza
guest_contactNaostringTelefone ou contato11999998888
statusNaostringLista de status aceitosPENDING
guestsNaoarrayLista de hospedes[...]

Se guest_name nao for enviado na criacao da reserva, a API responde 422.

{
  "reservation_code": "RES-12345",
  "arrival_date": "2026-02-20",
  "departure_date": "2026-02-23",
  "unit": "101",
  "adults": 2,
  "children": 1,
  "ota_source": "Booking.com",
  "travel_reason": "LAZER_FERIAS",
  "transport_type": "AUTOMOVEL",
  "origin_city": "Sao Paulo/SP",
  "destination_city": "Rio de Janeiro/RJ",
  "guest_name": "Maria Souza",
  "guest_contact": "11999998888"
}

Resposta resumida:

{
  "success": true,
  "reservation": {
    "id": 123,
    "reservation_code": "RES-12345",
    "status": "PENDING",
    "checkin_status": "PENDING",
    "checkout_status": "PENDING",
    "arrival_date": "2026-02-20",
    "departure_date": "2026-02-23",
    "check_in_at": null,
    "check_out_at": null,
    "unit": "101",
    "adults": 2,
    "children": 1,
    "ota_source": "Booking.com",
    "travel_reason": "LAZER_FERIAS",
    "transport_type": "AUTOMOVEL",
    "origin_city": "Sao Paulo/SP",
    "destination_city": "Rio de Janeiro/RJ",
    "guest_name": "Maria Souza",
    "guest_contact": "11999998888",
    "created_at": "2026-03-19 10:00:00",
    "updated_at": "2026-03-19 10:05:00"
  },
  "guests_count": 0,
  "whatsapp": {
    "success": false,
    "skipped": true,
    "message": ""
  }
}

Os campos de viagem e titular retornam no objeto reservation e podem ser reaproveitados por sistemas externos.

2) Sincronizar hospedes

POST https://fnrh.sisteminter.net/api/v1/reservas/{reservation_code}/hospedes

Envia ou atualiza a lista completa de hospedes da reserva.

CampoObrigatorioTipoFormatoExemplo
doc_typeSimstringcpf ou passportcpf
doc_numberSimstringCPF (11 digitos) ou passaporte12345678901
nameSimstringNome completoMaria Souza
is_primaryNaobool/int1/true titular. Primeiro item vira titular por padrao.1
social_nameNaostringNome socialMaria S.
birth_dateNaodateYYYY-MM-DD1990-08-15
genderNaostringLista de generoMULHER
racaNaostringLista raca/corBRANCA
has_disabilityNaostringNAO, SIM, NAOINFORMARNAO
disability_typeNaostringObrigatorio se has_disability=SIMFISICA
tipo_nacionalidadeNaostringBRASILEIRO ou ESTRANGEIROBRASILEIRO
nationalityNaostringPais ISO-2BR
professionNaostringProfissaoEngenheira
emailNaostringE-mailmaria@email.com
phoneNaostringTelefone11999998888
address_streetNaostringLogradouroRua A
address_numberNaostringNumero123
address_complementNaostringComplementoApto 12
address_neighborhoodNaostringBairroCentro
address_cityNaostringCidadeSao Paulo
address_stateNaostringUFSP
address_zipNaostringCEP01001-000
address_countryNaostringPais textoBrasil
passport_countryNaostringPais emissor passaporteEstados Unidos
{
  "guests": [
    {
      "doc_type": "cpf",
      "doc_number": "12345678901",
      "name": "Maria Souza",
      "is_primary": 1,
      "email": "maria@email.com",
      "phone": "11999998888"
    },
    {
      "doc_type": "passport",
      "doc_number": "AB1234567",
      "name": "John Doe",
      "is_primary": 0
    }
  ]
}

3) Consultar check-in

GET https://fnrh.sisteminter.net/api/v1/reservas/{reservation_code}

Retorna os dados consolidados da reserva/check-in e a lista de hospedes vinculados.

O objeto reservation retorna os mesmos campos consolidados do upsert. O array guests traz os dados cadastrados de cada hospede.

{
  "success": true,
  "reservation": {
    "id": 123,
    "reservation_code": "RES-12345",
    "status": "PENDING",
    "checkin_status": "PENDING",
    "checkout_status": "PENDING",
    "arrival_date": "2026-02-20",
    "departure_date": "2026-02-23",
    "check_in_at": null,
    "check_out_at": null,
    "unit": "101",
    "adults": 2,
    "children": 1,
    "ota_source": "Booking.com",
    "travel_reason": "LAZER_FERIAS",
    "transport_type": "AUTOMOVEL",
    "origin_city": "Sao Paulo/SP",
    "destination_city": "Rio de Janeiro/RJ",
    "guest_name": "Maria Souza",
    "guest_contact": "11999998888",
    "created_at": "2026-03-19 10:00:00",
    "updated_at": "2026-03-19 10:05:00"
  },
  "guests_count": 2,
  "guests": [
    {
      "id": 456,
      "name": "Maria Souza",
      "social_name": null,
      "doc_type": "cpf",
      "doc_number": "12345678901",
      "birth_date": "1990-01-01",
      "gender": "MULHER",
      "raca": "BRANCA",
      "has_disability": "NAO",
      "disability_type": null,
      "tipo_nacionalidade": "BRASILEIRO",
      "nationality": "BR",
      "profession": "Engenheira",
      "email": "maria@email.com",
      "phone": "11999998888",
      "address_country": "Brasil",
      "address_street": "Rua A",
      "address_number": "123",
      "address_complement": "Apto 12",
      "address_neighborhood": "Centro",
      "address_city": "Sao Paulo",
      "address_state": "SP",
      "address_zip": "01001-000",
      "passport_country": null,
      "is_primary": true
    }
  ]
}

3.1) Webhook opcional de pre-check-in

Quando habilitado, o sistema envia automaticamente um POST para a URL configurada assim que o hospede conclui o pre-check-in.

Evento enviado: precheckin.completed. O payload espelha o retorno do GET /reservas/{reservation_code} e inclui event e hotel_id.

Autenticacao outbound por header customizado. Por padrao usamos X-Sisteminter-Webhook-Token, mas o nome pode ser ajustado na implantacao. Em caso de falha, o envio entra em fila com retries automaticos.

POST URL_WEBHOOK_CONFIGURADA
Content-Type: application/json
X-Webhook-Event: precheckin.completed
X-Webhook-Idempotency-Key: <hash>
X-Sisteminter-Webhook-Token: <secret>

{
  "event": "precheckin.completed",
  "hotel_id": 1,
  "reservation": {
    "reservation_code": "RES-12345",
    "travel_reason": "LAZER_FERIAS",
    "transport_type": "AUTOMOVEL",
    "origin_city": "Sao Paulo/SP",
    "destination_city": "Rio de Janeiro/RJ",
    "guest_name": "Maria Souza"
  },
  "guests_count": 2,
  "guests": [
    {
      "name": "Maria Souza",
      "doc_type": "cpf",
      "doc_number": "12345678901",
      "is_primary": true
    }
  ]
}

4) Marcar check-in

POST https://fnrh.sisteminter.net/api/v1/reservas/{reservation_code}/checkin

Marca o check-in da reserva.

{
  "check_in_at": "2026-02-20 14:30:00"
}

Sem check_in_at, o servidor usa data/hora atual.

5) Marcar check-out

POST https://fnrh.sisteminter.net/api/v1/reservas/{reservation_code}/checkout

Marca o check-out da reserva.

{
  "check_out_at": "2026-02-23 12:00:00"
}

Sem check_out_at, o servidor usa data/hora atual.

6) Cancelar reserva

POST https://fnrh.sisteminter.net/api/v1/reservas/{reservation_code}/cancelar

Marca a reserva como CANCELADA. Sem body (pode enviar {}).

{}

Se ja estiver CANCELADA, a API responde sucesso (idempotente). Se estiver NOSHOW ou COMPLETED, retorna 409.

7) Marcar no-show

POST https://fnrh.sisteminter.net/api/v1/reservas/{reservation_code}/noshow

Marca a reserva como NOSHOW (nao comparecimento). Sem body (pode enviar {}).

{}

Se ja estiver NOSHOW, a API responde sucesso (idempotente). Se estiver CANCELADA ou COMPLETED, retorna 409.

Valores esperados (listas rápidas)

travel_reason: LAZER_FERIAS, NEGOCIOS, CONGRESSO_FEIRA, COMPRAS, ESTUDOS_CURSOS, PARENTES_AMIGOS, RELIGIAO, SAUDE
transport_type: AUTOMOVEL, AVIAO, ONIBUS, MOTO, NAVIO_BARCO, TREM, BICICLETA, PE
gender: HOMEM, MULHER, OUTRO, NAOINFORMADO
tipo_nacionalidade: BRASILEIRO, ESTRANGEIRO
has_disability: NAO, SIM, NAOINFORMAR
disability_type: FISICA, AUDITIVA_SURDEZ, VISUAL, INTELECTUAL, MULTIPLA
doc_type: cpf, passport
status: PENDING, SENT, COMPLETED, CANCELADA, NOSHOW

Tabela de erros e retorno

Status HTTPSignificadoAcao recomendada
200SucessoOperacao concluida.
400JSON invalidoValide estrutura, aspas e virgulas.
401Credencial invalida/ausenteRevise X-Property-Id e X-Api-Key.
402Pendencia de pagamentoRegularize a assinatura para reativar a API.
403Acesso negadoVerifique plano/limites e configuracao da integracao.
404Reserva nao encontradaConfirme o reservation_code.
409Conflito de statusEvite cancelar/no-show apos concluir check-in/checkout.
422Dados invalidosRevise obrigatorios e formatos.
429Rate limitRespeite o Retry-After e tente novamente.
500Erro internoTente novamente e envie payload/horario ao suporte.