Hospital Oftalmológico de Anápolis
Requisitos de API - Sistema de Prontuário e Agendamento
PARA O FORNECEDOR DO SOFTWARE

Requisitos de API para Integração
Sistema de Prontuário e Agendamento

Documento destinado à empresa fornecedora do software de prontuário e agendamento do HOA. Detalha todas as informações que a API deve fornecer para viabilizar o atendimento automatizado via WhatsApp.

Ambos os cenários
Cenário 1: Kommo nativo
Cenário 2: Kommo + n8n + IA
Contexto Cenários Infraestrutura Endpoints Mapeamento Erros Fluxos Checklist Resumo
1

Contexto e Objetivo

Para quem é este documento: Equipe técnica da empresa fornecedora do software de prontuário eletrônico e agendamento de consultas utilizado pelo Hospital Oftalmológico de Anápolis (HOA).
O que o HOA precisa

O HOA está implementando um chatbot inteligente no WhatsApp para atendimento automatizado de pacientes. Para que esse chatbot funcione integrado ao sistema de agendamento real da clínica, precisamos que o software forneça uma API REST que permita:

#CapacidadeDescrição
1Consultar disponibilidadeVerificar horários livres na agenda de cada médico
2Criar agendamentoAgendar consulta informando paciente, médico, data e horário
3Reagendar consultaAlterar data/hora de consulta existente
4Cancelar consultaCancelar agendamento existente
5Buscar pacienteVerificar se paciente já está cadastrado (por telefone)
6Cadastrar pacienteRegistrar novo paciente (nome e telefone no mínimo)
7Listar profissionaisObter médicos com suas especialidades
8Listar convêniosObter convênios aceitos
9Listar tipos de consultaObter tipos de agendamento com durações
2

Dois Cenários de Integração

O HOA avalia dois cenários de integração. A API necessária é a mesma em ambos - o que muda é quem consome essa API. O fornecedor do software precisa entregar os mesmos endpoints independentemente do cenário escolhido.
Cenário 1
Kommo Nativo

O próprio Kommo CRM gerencia o chatbot usando o AI Agent nativo + Cloudflare Worker como ponte.

Fluxo:
WhatsApp → Kommo AI Agent → Cloudflare Worker → API do Sistema → Kommo Calendar
Vantagens:
  • Menos componentes
  • Custo menor
  • Configuração mais simples
Limitações:
  • Chatbot baseado em menus fixos
  • Não entende linguagem natural
  • Fluxo rígido de conversa
Cenário 2
Kommo + n8n + IA

O n8n orquestra o fluxo, usando Inteligência Artificial (Claude/GPT) para entender linguagem natural.

Fluxo:
WhatsApp → Kommo → n8n → IA → API do Sistema → n8n → Kommo
Vantagens:
  • Entende linguagem natural
  • Triagem inteligente por sintomas
  • Conversa livre e adaptativa
  • Integrações ilimitadas
Limitações:
  • Mais componentes para manter
  • Custo um pouco maior (~R$ 450/mês)
Conclusão para o fornecedor: Independentemente do cenário, a API que vocês precisam fornecer é exatamente a mesma. Os endpoints, campos e formatos descritos neste documento se aplicam a ambos os cenários.
3

Requisitos de Infraestrutura da API

3.1 Informações básicas necessárias
ItemDescriçãoExemplo
URL base da APIEndereço raiz de todos os endpointshttps://api.sistema.com.br/v1
ProtocoloObrigatoriamente HTTPSHTTPS
Formato de dadosJSON (request e response)application/json
EncodingUTF-8UTF-8
Rate limitQuantas requisições por minuto são permitidas60 req/min
Ambiente de testesURL de sandbox para desenvolvimentohttps://sandbox.sistema.com.br/v1
3.2 Autenticação

Informar qual método de autenticação a API utiliza:

MétodoComo funciona
API KeyChave fixa no header X-API-Key: xxx
OAuth 2.0Client ID + Client Secret para gerar access token
Bearer TokenToken no header Authorization: Bearer xxx
Basic AuthUsuário e senha codificados em base64
Necessário informar: Credenciais de acesso, validade do token (se expira e como renovar), escopos/permissões necessários (leitura de agenda, escrita de agendamento, etc.)
3.3 Documentação
ItemNecessidade
Documentação da API (Swagger/OpenAPI)Ideal, mas não obrigatório
Coleção Postman ou InsomniaFacilita os testes
Exemplos de request/responseOBRIGATÓRIO
Códigos de erro documentadosOBRIGATÓRIO
Contato técnico do fornecedorOBRIGATÓRIO
4

Endpoints Necessários (9 endpoints)

Todos os endpoints abaixo são necessários para ambos os cenários de integração. Os exemplos de JSON mostram o formato esperado - os nomes dos campos podem variar desde que a informação esteja presente.
GET/professionalsEP-01: Listar Profissionais
Retornar a lista de médicos cadastrados com suas especialidades e duração padrão de consulta.
Response esperado
{
  "data": [
    {
      "id": 101,
      "name": "Dr. Augusto Pereira",
      "crm": "CRM/GO 5892",
      "specialties": ["Oftalmologia Geral", "Cirurgia Refrativa"],
      "active": true,
      "appointment_duration_minutes": 30
    }
  ]
}
CampoTipoDescrição
idintegerID único do profissionalobrigatório
namestringNome completoobrigatório
specialtiesarrayEspecialidade(s)obrigatório
activebooleanSe está aceitando agendamentosobrigatório
appointment_duration_minutesintegerDuração padrão (minutos)obrigatório
crmstringRegistro no CRMdesejável
insurance_acceptedarrayConvênios aceitosdesejável
GET/availabilityEP-02: Consultar DisponibilidadeENDPOINT CRÍTICO
Este é o endpoint MAIS CRÍTICO de toda a integração. Sem ele, não é possível mostrar horários disponíveis ao paciente.
Dado um médico e um intervalo de datas, retornar os horários disponíveis para agendamento.
Parâmetros de consulta (query string)
ParâmetroTipoDescrição
professional_idintegerID do médicoobrigatório
date_startYYYY-MM-DDData inicialobrigatório
date_endYYYY-MM-DDData finalobrigatório
appointment_type_idintegerTipo de consultaopcional
insurance_idintegerConvênioopcional
Response esperado
{
  "professional_id": 101,
  "professional_name": "Dr. Augusto Pereira",
  "available_slots": [
    {
      "date": "2026-06-16",
      "weekday": "terça",
      "slots": [
        { "start_time": "08:00", "end_time": "08:30", "available": true },
        { "start_time": "08:30", "end_time": "09:00", "available": true },
        { "start_time": "09:00", "end_time": "09:30", "available": false }
      ]
    }
  ]
}
Regras que o endpoint deve respeitar: Não retornar horários passados; respeitar antecedencia mínima; considerar bloqueios do médico (férias, folgas); considerar duração da consulta; considerar buffer entre consultas.
GET/appointment-typesEP-03: Listar Tipos de Consulta
Retornar os tipos de consulta disponíveis com suas durações.
{
  "data": [
    { "id": 1, "name": "Consulta Oftalmologia Geral", "duration_minutes": 30 },
    { "id": 2, "name": "Avaliação Cirurgia Refrativa", "duration_minutes": 45 },
    { "id": 3, "name": "Retorno", "duration_minutes": 15 }
  ]
}
GET/insurancesEP-04: Listar Convênios
Retornar convênios cadastrados com seus IDs para mapeamento.
{
  "data": [
    { "id": 1, "name": "IPASGO", "active": true },
    { "id": 2, "name": "Unimed", "active": true },
    { "id": 99, "name": "Particular", "active": true }
  ]
}
GET/patients/searchEP-05a: Buscar Paciente
Verificar se o paciente já existe no sistema pelo telefone ou CPF.
ParâmetroTipoDescrição
phonestringTelefone do pacienteobrigatório*
cpfstringCPF do pacienteobrigatório*

*Pelo menos um deve ser informado.

{
  "found": true,
  "patient": {
    "id": 5001,
    "name": "João Silva",
    "phone": "62991510480",
    "insurance_id": 1,
    "insurance_name": "IPASGO"
  }
}
POST/patientsEP-05b: Cadastrar Paciente
Cadastrar novo paciente quando não encontrado na busca.
Request Body
{
  "name": "João Silva",
  "phone": "62991510480",
  "email": "joao@email.com",
  "cpf": "123.456.789-00",
  "birth_date": "1985-03-15",
  "insurance_id": 1
}
CampoTipo
namestringobrigatório
phonestringobrigatório
cpfstringdesejável
emailstringdesejável
birth_dateYYYY-MM-DDdesejável
insurance_idintegerdesejável
POST/appointmentsEP-06: Criar AgendamentoENDPOINT CRÍTICO
Segundo endpoint mais crítico. Efetiva o agendamento no sistema.
Request Body
{
  "patient_id": 5001,
  "professional_id": 101,
  "appointment_type_id": 1,
  "date": "2026-06-16",
  "start_time": "08:00",
  "insurance_id": 1,
  "notes": "Agendado via chatbot WhatsApp",
  "source": "kommo_chatbot"
}
CampoTipoDescrição
patient_idintegerID do pacienteobrigatório
professional_idintegerID do médicoobrigatório
dateYYYY-MM-DDData da consultaobrigatório
start_timeHH:MMHorário de inícioobrigatório
appointment_type_idintegerTipo de consultadesejável
insurance_idintegerConvêniodesejável
sourcestringOrigem do agendamentodesejável
Response - Sucesso
{
  "success": true,
  "appointment": {
    "id": 80001,
    "professional_name": "Dr. Augusto Pereira",
    "date": "2026-06-16",
    "start_time": "08:00",
    "end_time": "08:30",
    "status": "scheduled"
  }
}
Response - Conflito de horário (409)
{
  "success": false,
  "error": "slot_unavailable",
  "message": "Horário não está mais disponível",
  "next_available": [
    { "date": "2026-06-16", "start_time": "09:00" }
  ]
}
PATCH/appointments/{id}/rescheduleEP-07: Reagendar
Alterar data/hora de uma consulta existente.
Request: { "new_date": "2026-06-18", "new_start_time": "10:00" }

Response: {
  "success": true,
  "appointment": {
    "id": 80001, "new_date": "2026-06-18",
    "new_start_time": "10:00", "status": "rescheduled"
  }
}
PATCH/appointments/{id}/cancelEP-08: Cancelar
Cancelar uma consulta existente, liberando o horário.
Request: { "reason": "Paciente solicitou via chatbot" }

Response: { "success": true, "status": "cancelled" }
GET/appointmentsEP-09: Listar Agendamentos do Paciente
Listar consultas futuras de um paciente para reagendamento ou cancelamento.
ParâmetroTipo
patient_phonestringobrigatório*
patient_idintegerobrigatório*
statusstringopcional (scheduled, cancelled, completed)
{
  "data": [
    {
      "id": 80001,
      "date": "2026-06-16",
      "start_time": "08:00",
      "professional_name": "Dr. Augusto Pereira",
      "specialty": "Oftalmologia Geral",
      "status": "scheduled"
    }
  ]
}
5

Tabelas de Mapeamento (preencher)

Para a integração funcionar, precisamos mapear os dados entre os sistemas. Solicitamos que o fornecedor preencha os campos marcados com "?".
5.1 Mapeamento de Médicos
MédicoEspecialidadeID no Sistema
Dr. Augusto PereiraOftalmologia Geral?
(preencher)Oftalmopediatria?
(preencher)Retina e Vítreo?
(preencher)Glaucoma?
(preencher)Córnea?
(preencher)Oculoplástica?
(preencher)Cirurgia Refrativa?
(preencher)Lentes de Contato?
(preencher)Cardiologia?
(preencher)Odontologia?
5.2 Mapeamento de Convênios
ConvênioID no Sistema
AFFEGO?
Base Aérea?
Bonfinópolis?
Bradesco Saúde?
Caixa Saúde?
Campo Limpo?
CASSI?
CELGMED?
GEAP?
IPASGO?
Postal Saúde?
Unimed?
Urban?
COOTRAME?
FMS Anápolis?
Particular?
5.3 Mapeamento de Tipos de Consulta
EspecialidadeNome no SistemaIDDuração
Oftalmologia Geral???
Oftalmopediatria???
Retina e Vítreo???
Glaucoma???
Córnea???
Oculoplástica???
Cirurgia Refrativa???
Lentes de Contato???
Cardiologia???
Odontologia???
6

Tratamento de Erros

Códigos HTTP esperados
CódigoSituaçãoDescrição
200SucessoDados retornados / ação realizada
201CriadoAgendamento ou paciente criado
400Dados inválidosCampos obrigatórios faltando
401Não autenticadoCredenciais inválidas ou token expirado
404Não encontradoPaciente/agendamento não encontrado
409ConflitoHorário ocupado (retornar próximos disponíveis)
422Regra de negócioEx: antecedencia mínima não respeitada
429Rate limitMuitas requisições
500Erro internoErro no servidor do sistema
Formato padrão de erro
{
  "success": false,
  "error": "slot_unavailable",
  "message": "Descrição legível do erro",
  "details": { "campo": "informação adicional" }
}
7

Fluxos de Uso da API

7.1 Agendamento (como a API será chamada)
1
Chatbot coleta: especialidade, convênio, preferência de horário
2
GET /availability - Busca horários do médico
3
Paciente escolhe horário
4
GET /patients/search?phone=... - Verifica se paciente existe
5
Se não existe: POST /patients - Cadastra paciente
6
POST /appointments - Cria agendamento
7
Chatbot confirma ao paciente
7.2 Reagendamento
1
GET /appointments?patient_phone=... - Lista consultas futuras
2
Paciente confirma qual remarcar
3
GET /availability - Busca novos horários
4
PATCH /appointments/{id}/reschedule - Reagenda
7.3 Cancelamento
1
GET /appointments?patient_phone=... - Lista consultas futuras
2
Paciente confirma qual cancelar
3
PATCH /appointments/{id}/cancel - Cancela
8

Checklist para o Fornecedor

Informações de Acesso
  • URL base da API (produção)
  • URL base da API (sandbox/testes)
  • Credenciais de autenticação (tipo + chaves)
  • Documentação da API (se existir)
  • Contato técnico para suporte durante integração
Endpoints Necessários
  • EP-01: Listar médicos/profissionais com especialidades
  • EP-02: Consultar disponibilidade/horários livres por médico e data
  • EP-03: Listar tipos de consulta/agendamento
  • EP-04: Listar convênios cadastrados
  • EP-05a: Buscar paciente por telefone ou CPF
  • EP-05b: Cadastrar novo paciente
  • EP-06: Criar agendamento
  • EP-07: Reagendar consulta existente
  • EP-08: Cancelar consulta
  • EP-09: Listar agendamentos futuros de um paciente
Mapeamento de Dados
  • Lista completa de médicos com IDs
  • Lista completa de especialidades com IDs
  • Lista completa de convênios com IDs
  • Lista completa de tipos de consulta com IDs e durações
  • Regras de negócio (antecedencia mínima, horários por médico, etc.)
Requisitos Técnicos
  • API aceita requisições em JSON via HTTPS
  • API retorna respostas em JSON com códigos HTTP padrão
  • API trata conflitos de horário (retorno 409 com alternativas)
  • API suporta busca de paciente por telefone
  • Rate limit documentado
9

Resumo Executivo

O que precisamos (versão simplificada)

Precisamos que o software de agendamento da clínica disponibilize uma API (interface de programação) que permita, de forma automatizada:

  1. Consultar quais horários estão livres na agenda de cada médico
  2. Agendar uma consulta informando paciente, médico, data e horário
  3. Reagendar uma consulta existente para novo horário
  4. Cancelar uma consulta existente
  5. Buscar se um paciente já está cadastrado (pelo telefone)
  6. Cadastrar um novo paciente (nome e telefone no mínimo)

Isso permitirá que nosso chatbot no WhatsApp consulte a agenda real dos médicos em tempo real e agende consultas automaticamente, sem intervenção humana, 24 horas por dia.

Essa integração funcionará tanto no cenário com Kommo nativo quanto no cenário com Kommo + n8n + IA. A API necessária é a mesma em ambos os casos.

Caso a API não esteja disponível, solicitamos informações sobre previsão de implementação ou alternativas de integração que o sistema suporte.

Hospital Oftalmológico de Anápolis (HOA)

Av. Faiad Hanna, 235 - Cidade Jardim, Anápolis - GO | (62) 3310-5600

Documento técnico v1.0 - Junho 2026 | Confidencial