📚 Referência — Cadastros
Todas as rotas de cadastro da API externa, na ordem em que são usadas numa implantação: estrutura, catálogos, profissionais, convênios, preços e pacientes.
Esta página cobre 17 grupo(s), 76 caminhos e
131 operações (método + caminho) do Swagger oficial. Todas as rotas usam a base
https://api.rabisistemas.com.br/api/v1/integrations (produção) ou
https://api.hmg.rabisistemas.dev/api/v1/integrations (homologação) e o header
Authorization: Bearer rbk_SEU_TOKEN. Toda rota pode responder também 401
(chave ausente/inválida/revogada/expirada), 403 (sem a permissão) e 503
(não foi possível validar a chave) — veja códigos de resposta.
Campos marcados ✅ são obrigatórios. Valores monetários são sempre em reais (não centavos), salvo onde a rota avisa o contrário.
Sumário
Empresas 5 operações
Empresas e unidades da clínica.
Primeiro cadastro de uma implantação. O id devolvido é o empresaId de depósitos, locais, convênios e colaboradores.
GET /empresas
Listar empresas/unidades · Permissão: empresa:read
Sem paginação — devolve todas as empresas cadastradas na clínica, ativas e inativas.
Respostas
200— Lista de empresas401— Token ausente, inválido, revogado ou expirado403— A chave não tem a permissão exigida pela rota (devolvida emescopoFaltante)503— Não foi possível validar a chave no momento — falha de rede/indisponibilidade, não problema com a chave em si
POST /empresas
Cadastrar empresa/unidade · Permissão: empresa:create
Corpo (application/json) — obrigatório
Campos obrigatórios: razaoSocial, nomeFantasia, cnpj, endereco
Todos os campos do corpo (23)
| Campo | Tipo | Obrig. | Descrição / restrições |
|---|---|---|---|
razaoSocial | string | ✅ | |
nomeFantasia | string | ✅ | |
cnpj | string | ✅ | Único no sistema. Aceita com ou sem máscara. |
ativo | boolean | ||
cnes | string | ||
tipoContratoId | integer | ||
dataInicioVigencia | string (date-time) | ||
dataFimVigencia | string (date-time) | ||
dataRenovacao | string (date-time) | ||
telefone | string | ||
telefone2 | string | ||
celular | string | ||
celular2 | string | ||
email | string | ||
email2 | string | ||
endereco | object | ✅ | |
endereco.Cep | string | ||
endereco.Endereco | string | ||
endereco.Numero | string | ||
endereco.Complemento | string | ||
endereco.Bairro | string | ||
endereco.Cidade | string | ||
endereco.unidadeFederativaId | object | Aceita o ID da unidade federativa ou a sigla (ex.: "DF"). |
Respostas
201— Empresa criada401— Token ausente, inválido, revogado ou expirado403— A chave não tem a permissão exigida pela rota (devolvida emescopoFaltante)409— CNPJ já cadastrado (para outra empresa ativa ou desativada)503— Não foi possível validar a chave no momento — falha de rede/indisponibilidade, não problema com a chave em si
GET /empresas/{id}
Consultar empresa/unidade · Permissão: empresa:read
Parâmetros
| Nome | Onde | Obrig. | Tipo | Descrição / restrições |
|---|---|---|---|---|
id | caminho | ✅ sim | integer | ID da empresa/unidade — mín. 1 |
Respostas
200— Empresa401— Token ausente, inválido, revogado ou expirado403— A chave não tem a permissão exigida pela rota (devolvida emescopoFaltante)404— Empresa não encontrada503— Não foi possível validar a chave no momento — falha de rede/indisponibilidade, não problema com a chave em si
PUT /empresas/{id}
Atualizar empresa/unidade · Permissão: empresa:update
Substitui o cadastro por completo (mesmo comportamento do PUT /convenios/{id}), não faz merge parcial — envie a empresa inteira.
Parâmetros
| Nome | Onde | Obrig. | Tipo | Descrição / restrições |
|---|---|---|---|---|
id | caminho | ✅ sim | integer | ID da empresa/unidade — mín. 1 |
Corpo (application/json) — obrigatório
Campos obrigatórios: razaoSocial, nomeFantasia, cnpj, endereco
Todos os campos do corpo (23)
| Campo | Tipo | Obrig. | Descrição / restrições |
|---|---|---|---|
razaoSocial | string | ✅ | |
nomeFantasia | string | ✅ | |
cnpj | string | ✅ | Único no sistema. Aceita com ou sem máscara. |
ativo | boolean | ||
cnes | string | ||
tipoContratoId | integer | ||
dataInicioVigencia | string (date-time) | ||
dataFimVigencia | string (date-time) | ||
dataRenovacao | string (date-time) | ||
telefone | string | ||
telefone2 | string | ||
celular | string | ||
celular2 | string | ||
email | string | ||
email2 | string | ||
endereco | object | ✅ | |
endereco.Cep | string | ||
endereco.Endereco | string | ||
endereco.Numero | string | ||
endereco.Complemento | string | ||
endereco.Bairro | string | ||
endereco.Cidade | string | ||
endereco.unidadeFederativaId | object | Aceita o ID da unidade federativa ou a sigla (ex.: "DF"). |
Respostas
200— Empresa atualizada401— Token ausente, inválido, revogado ou expirado403— A chave não tem a permissão exigida pela rota (devolvida emescopoFaltante)404— Empresa não encontrada409— CNPJ já cadastrado (para outra empresa ativa ou desativada)503— Não foi possível validar a chave no momento — falha de rede/indisponibilidade, não problema com a chave em si
DELETE /empresas/{id}
Desativar empresa/unidade · Permissão: empresa:delete
É uma desativação (ativo = false), não uma exclusão física. Recusa (400) se a empresa tiver atendimentos, colaboradores, convênios, depósitos, locais ou movimentações financeiras ativas vinculadas.
Parâmetros
| Nome | Onde | Obrig. | Tipo | Descrição / restrições |
|---|---|---|---|---|
id | caminho | ✅ sim | integer | ID da empresa/unidade — mín. 1 |
Respostas
200— Empresa desativada400— Empresa possui relações ativas vinculadas401— Token ausente, inválido, revogado ou expirado403— A chave não tem a permissão exigida pela rota (devolvida emescopoFaltante)404— Empresa não encontrada503— Não foi possível validar a chave no momento — falha de rede/indisponibilidade, não problema com a chave em si
Depósitos 6 operações
Depósitos de estoque da clínica.
Crie um depósito mínimo por unidade logo após a empresa: POST /locais exige depositoPadraoSaidaId ativo e POST /produtos exige depositoId.
GET /depositos
Listar depósitos · Permissão: deposito:read
Parâmetros
| Nome | Onde | Obrig. | Tipo | Descrição / restrições |
|---|---|---|---|---|
page | query | não | integer | padrão 1; mín. 1 |
pageSize | query | não | integer | padrão 50; mín. 1; máx. 200 |
ativo | query | não | boolean |
Respostas
200— Lista paginada401— Token ausente, inválido, revogado ou expirado403— A chave não tem a permissão exigida pela rota (devolvida emescopoFaltante)503— Não foi possível validar a chave no momento — falha de rede/indisponibilidade, não problema com a chave em si
POST /depositos
Cadastrar depósito · Permissão: deposito:create
Corpo (application/json) — obrigatório
Campos obrigatórios: empresaId, descricaoDeposito
| Campo | Tipo | Obrig. | Descrição / restrições |
|---|---|---|---|
empresaId | integer | ✅ | |
descricaoDeposito | string | ✅ |
Respostas
201— Depósito criado401— Token ausente, inválido, revogado ou expirado403— A chave não tem a permissão exigida pela rota (devolvida emescopoFaltante)409— Já existe um depósito com este nome nesta unidade503— Não foi possível validar a chave no momento — falha de rede/indisponibilidade, não problema com a chave em si
POST /depositos/bulk
Cadastrar vários depósitos de uma vez · Permissão: deposito:create
Até 50 itens por requisição (chave depositos). 207 = falha parcial.
Corpo (application/json) — obrigatório
Campos obrigatórios: depositos, depositos[].empresaId, depositos[].descricaoDeposito
Cada item de depositos[] tem os mesmos campos de POST /depositos (máx. 50 itens).
| Campo | Tipo | Obrig. | Descrição / restrições |
|---|---|---|---|
depositos | array<object> | ✅ | máx. itens 50 |
Respostas
201— Todos criados207— Falha parcial400— Lote vazio ou acima de 50 itens401— Token ausente, inválido, revogado ou expirado403— A chave não tem a permissão exigida pela rota (devolvida emescopoFaltante)429— Já existe um lote em andamento para esta clínica e recurso503— Não foi possível validar a chave no momento — falha de rede/indisponibilidade, não problema com a chave em si
GET /depositos/{id}
Consultar depósito · Permissão: deposito:read
Parâmetros
| Nome | Onde | Obrig. | Tipo | Descrição / restrições |
|---|---|---|---|---|
id | caminho | ✅ sim | integer | ID do depósito — mín. 1 |
Respostas
200— Depósito401— Token ausente, inválido, revogado ou expirado403— A chave não tem a permissão exigida pela rota (devolvida emescopoFaltante)404— Depósito não encontrado503— Não foi possível validar a chave no momento — falha de rede/indisponibilidade, não problema com a chave em si
PUT /depositos/{id}
Atualizar depósito · Permissão: deposito:update
Bloqueia nome duplicado ativo na mesma empresa (409).
Parâmetros
| Nome | Onde | Obrig. | Tipo | Descrição / restrições |
|---|---|---|---|---|
id | caminho | ✅ sim | integer | ID do depósito — mín. 1 |
Corpo (application/json) — obrigatório
Campos obrigatórios: empresaId, descricaoDeposito
| Campo | Tipo | Obrig. | Descrição / restrições |
|---|---|---|---|
empresaId | integer | ✅ | |
descricaoDeposito | string | ✅ |
Respostas
200— Row crua, sem include — confirmado batendo com o schema Deposito, com uma ressalva: o real também temprodutoId(integer, nullable), não documentado no schema hoje.401— Token ausente, inválido, revogado ou expirado403— A chave não tem a permissão exigida pela rota (devolvida emescopoFaltante)404— Depósito não encontrado409— Já existe um depósito ativo com este nome nesta empresa503— Não foi possível validar a chave no momento — falha de rede/indisponibilidade, não problema com a chave em si
DELETE /depositos/{id}
Desativar depósito · Permissão: deposito:delete
Desativação lógica, não exclusão física.
Parâmetros
| Nome | Onde | Obrig. | Tipo | Descrição / restrições |
|---|---|---|---|---|
id | caminho | ✅ sim | integer | ID do depósito — mín. 1 |
Respostas
200— Corpo de sucesso é o número cru201, não um objeto.401— Token ausente, inválido, revogado ou expirado403— A chave não tem a permissão exigida pela rota (devolvida emescopoFaltante)404— "Failed in Delete Deposito." — mensagem em inglês, inconsistente com o padrão em português do resto da API503— Não foi possível validar a chave no momento — falha de rede/indisponibilidade, não problema com a chave em si
Locais 5 operações
Locais de atendimento dentro de uma empresa/unidade.
depositoPadraoSaidaId é obrigatório e precisa estar ativo — sem depósito, a resposta é 422.
GET /locais
Listar locais · Permissão: local:read
Sem paginação — devolve todos os locais cadastrados na clínica.
Respostas
200— Lista de locais401— Token ausente, inválido, revogado ou expirado403— A chave não tem a permissão exigida pela rota (devolvida emescopoFaltante)503— Não foi possível validar a chave no momento — falha de rede/indisponibilidade, não problema com a chave em si
POST /locais
Cadastrar local · Permissão: local:create
Corpo (application/json) — obrigatório
Campos obrigatórios: nome, empresaId, depositoPadraoSaidaId
| Campo | Tipo | Obrig. | Descrição / restrições |
|---|---|---|---|
nome | string | ✅ | |
empresaId | integer | ✅ | ID da empresa dona do local. |
depositoPadraoSaidaId | integer | ✅ | ID do depósito usado como padrão de saída de estoque nesse local. Precisa estar ativo. |
Respostas
201— Local criado401— Token ausente, inválido, revogado ou expirado403— A chave não tem a permissão exigida pela rota (devolvida emescopoFaltante)409— Já existe um local com esse nome nessa empresa422— O depósito padrão de saída selecionado está inativo ou não existe503— Não foi possível validar a chave no momento — falha de rede/indisponibilidade, não problema com a chave em si
GET /locais/{id}
Consultar local · Permissão: local:read
Parâmetros
| Nome | Onde | Obrig. | Tipo | Descrição / restrições |
|---|---|---|---|---|
id | caminho | ✅ sim | integer | ID do local — mín. 1 |
Respostas
200— Local401— Token ausente, inválido, revogado ou expirado403— A chave não tem a permissão exigida pela rota (devolvida emescopoFaltante)404— Local não encontrado503— Não foi possível validar a chave no momento — falha de rede/indisponibilidade, não problema com a chave em si
PUT /locais/{id}
Atualizar local · Permissão: local:update
Parâmetros
| Nome | Onde | Obrig. | Tipo | Descrição / restrições |
|---|---|---|---|---|
id | caminho | ✅ sim | integer | ID do local — mín. 1 |
Corpo (application/json) — obrigatório
Campos obrigatórios: nome, empresaId, depositoPadraoSaidaId
| Campo | Tipo | Obrig. | Descrição / restrições |
|---|---|---|---|
nome | string | ✅ | |
empresaId | integer | ✅ | ID da empresa dona do local. |
depositoPadraoSaidaId | integer | ✅ | ID do depósito usado como padrão de saída de estoque nesse local. Precisa estar ativo. |
Respostas
200— Local atualizado401— Token ausente, inválido, revogado ou expirado403— A chave não tem a permissão exigida pela rota (devolvida emescopoFaltante)404— Local não encontrado422— O depósito padrão de saída selecionado está inativo ou não existe503— Não foi possível validar a chave no momento — falha de rede/indisponibilidade, não problema com a chave em si
DELETE /locais/{id}
Desativar local · Permissão: local:delete
É uma desativação (ativo = false), não uma exclusão física. Recusa (409) se houver agendamentos, orçamentos, grades de colaborador/equipamento ou vínculos de serviço no local.
Parâmetros
| Nome | Onde | Obrig. | Tipo | Descrição / restrições |
|---|---|---|---|---|
id | caminho | ✅ sim | integer | ID do local — mín. 1 |
Respostas
200— Local desativado401— Token ausente, inválido, revogado ou expirado403— A chave não tem a permissão exigida pela rota (devolvida emescopoFaltante)404— Local não encontrado409— Existem registros vinculados a este local503— Não foi possível validar a chave no momento — falha de rede/indisponibilidade, não problema com a chave em si
Auxiliares 14 operações
Cadastros de domínio usados como ID em outras rotas — só leitura.
Somente leitura. Estes cadastros de domínio não são criados pela API: crie pela tela do sistema quando faltar algum e informe os ids nas demais rotas.
GET /auxiliares/tipos-produto
Listar tipos de produto · Permissão: auxiliar:read
Respostas
200— Lista401— Token ausente, inválido, revogado ou expirado403— A chave não tem a permissão exigida pela rota (devolvida emescopoFaltante)503— Não foi possível validar a chave no momento — falha de rede/indisponibilidade, não problema com a chave em si
GET /auxiliares/tipos-codigo
Listar tipos de código · Permissão: auxiliar:read
Respostas
200— Lista401— Token ausente, inválido, revogado ou expirado403— A chave não tem a permissão exigida pela rota (devolvida emescopoFaltante)503— Não foi possível validar a chave no momento — falha de rede/indisponibilidade, não problema com a chave em si
GET /auxiliares/tabelas-ans87
Listar tabelas de domínio ANS 87 · Permissão: auxiliar:read
Respostas
200— Lista401— Token ausente, inválido, revogado ou expirado403— A chave não tem a permissão exigida pela rota (devolvida emescopoFaltante)503— Não foi possível validar a chave no momento — falha de rede/indisponibilidade, não problema com a chave em si
GET /auxiliares/regimes-atendimento
Listar regimes de atendimento · Permissão: auxiliar:read
Respostas
200— Lista401— Token ausente, inválido, revogado ou expirado403— A chave não tem a permissão exigida pela rota (devolvida emescopoFaltante)503— Não foi possível validar a chave no momento — falha de rede/indisponibilidade, não problema com a chave em si
GET /auxiliares/tipos-servico
Listar tipos de serviço · Permissão: auxiliar:read
Respostas
200— Lista401— Token ausente, inválido, revogado ou expirado403— A chave não tem a permissão exigida pela rota (devolvida emescopoFaltante)503— Não foi possível validar a chave no momento — falha de rede/indisponibilidade, não problema com a chave em si
GET /auxiliares/tipos-guia
Listar tipos de guia · Permissão: auxiliar:read
Respostas
200— Lista401— Token ausente, inválido, revogado ou expirado403— A chave não tem a permissão exigida pela rota (devolvida emescopoFaltante)503— Não foi possível validar a chave no momento — falha de rede/indisponibilidade, não problema com a chave em si
GET /auxiliares/tipos-taxa
Listar tipos de taxa · Permissão: auxiliar:read
Respostas
200— Lista401— Token ausente, inválido, revogado ou expirado403— A chave não tem a permissão exigida pela rota (devolvida emescopoFaltante)503— Não foi possível validar a chave no momento — falha de rede/indisponibilidade, não problema com a chave em si
GET /auxiliares/unidades-medida
Listar unidades de medida · Permissão: auxiliar:read
Respostas
200— Lista401— Token ausente, inválido, revogado ou expirado403— A chave não tem a permissão exigida pela rota (devolvida emescopoFaltante)503— Não foi possível validar a chave no momento — falha de rede/indisponibilidade, não problema com a chave em si
GET /auxiliares/principios-ativos
Listar princípios ativos · Permissão: auxiliar:read
Respostas
200— Lista401— Token ausente, inválido, revogado ou expirado403— A chave não tem a permissão exigida pela rota (devolvida emescopoFaltante)503— Não foi possível validar a chave no momento — falha de rede/indisponibilidade, não problema com a chave em si
GET /auxiliares/sexos
Listar sexos · Permissão: auxiliar:read
Respostas
200— Lista401— Token ausente, inválido, revogado ou expirado403— A chave não tem a permissão exigida pela rota (devolvida emescopoFaltante)503— Não foi possível validar a chave no momento — falha de rede/indisponibilidade, não problema com a chave em si
GET /auxiliares/estados-civis
Listar estados civis · Permissão: auxiliar:read
Respostas
200— Lista401— Token ausente, inválido, revogado ou expirado403— A chave não tem a permissão exigida pela rota (devolvida emescopoFaltante)503— Não foi possível validar a chave no momento — falha de rede/indisponibilidade, não problema com a chave em si
GET /auxiliares/conselhos-profissionais
Listar conselhos profissionais · Permissão: auxiliar:read
Respostas
200— Lista401— Token ausente, inválido, revogado ou expirado403— A chave não tem a permissão exigida pela rota (devolvida emescopoFaltante)503— Não foi possível validar a chave no momento — falha de rede/indisponibilidade, não problema com a chave em si
GET /auxiliares/unidades-federativas
Listar unidades federativas · Permissão: auxiliar:read
Respostas
200— Lista401— Token ausente, inválido, revogado ou expirado403— A chave não tem a permissão exigida pela rota (devolvida emescopoFaltante)503— Não foi possível validar a chave no momento — falha de rede/indisponibilidade, não problema com a chave em si
GET /auxiliares/tipos-atendimento
Listar tipos de atendimento · Permissão: auxiliar:read
Respostas
200— Lista401— Token ausente, inválido, revogado ou expirado403— A chave não tem a permissão exigida pela rota (devolvida emescopoFaltante)503— Não foi possível validar a chave no momento — falha de rede/indisponibilidade, não problema com a chave em si
Operadoras 6 operações
Operadoras de convênio.
GET /operadoras
Listar operadoras · Permissão: operadora:read
Parâmetros
| Nome | Onde | Obrig. | Tipo | Descrição / restrições |
|---|---|---|---|---|
page | query | não | integer | padrão 1; mín. 1 |
pageSize | query | não | integer | padrão 50; mín. 1; máx. 200 |
ativo | query | não | boolean | Sem informar, lista ativas e inativas. |
Respostas
200— Lista paginada401— Token ausente, inválido, revogado ou expirado403— A chave não tem a permissão exigida pela rota (devolvida emescopoFaltante)503— Não foi possível validar a chave no momento — falha de rede/indisponibilidade, não problema com a chave em si
POST /operadoras
Cadastrar operadora · Permissão: operadora:create
Corpo (application/json) — obrigatório
Campos obrigatórios: nome, descricao, registroANS, cnpj, codigoCNES, endereco, endereco.cep, endereco.endereco, endereco.numero, endereco.bairro, endereco.cidade, endereco.unidadeFederativa
Se enviar plano, exige: plano[].nome
Todos os campos do corpo (24)
| Campo | Tipo | Obrig. | Descrição / restrições |
|---|---|---|---|
nome | string | ✅ | |
descricao | string | ✅ | |
registroANS | string | ✅ | |
cnpj | string | ✅ | |
razaoSocial | string | aceita null | |
codigoCNES | string | ✅ | |
codigoOperadora | string | aceita null | |
im | string | aceita null | |
identificacaoPrestadorXML | string | Como identificar o prestador no XML TISS — o XSD só aceita um dos dois. — valores: CNPJ, CODIGO_NA_OPERADORA; padrão CNPJ | |
endereco | object | ✅ | |
endereco.cep | string | ✅ | |
endereco.endereco | string | ✅ | |
endereco.numero | string | ✅ | |
endereco.complemento | string | aceita null | |
endereco.bairro | string | ✅ | |
endereco.cidade | string | ✅ | |
endereco.unidadeFederativa | string | ✅ | Nome por extenso da UF (não a sigla), precisa bater com um cadastro existente |
contato | array<object> | ||
contato[].pessoaDeContato | string | aceita null | |
contato[].email | string | ||
contato[].telefone | string | ||
contato[].celular | string | ||
plano | array<object> | ||
plano[].nome | string | ✅ |
Respostas
201— Operadora criada401— Token ausente, inválido, revogado ou expirado403— A chave não tem a permissão exigida pela rota (devolvida emescopoFaltante)404— Unidade Federativa não encontrada503— Não foi possível validar a chave no momento — falha de rede/indisponibilidade, não problema com a chave em si
POST /operadoras/bulk
Cadastrar várias operadoras de uma vez · Permissão: operadora:create
Até 50 itens por requisição (chave operadoras). 207 = falha parcial, ver resultados; reenvie só os itens com erro.
Corpo (application/json) — obrigatório
Campos obrigatórios: operadoras, operadoras[].nome, operadoras[].descricao, operadoras[].registroANS, operadoras[].cnpj, operadoras[].codigoCNES, operadoras[].endereco, operadoras[].endereco.cep, operadoras[].endereco.endereco, operadoras[].endereco.numero, operadoras[].endereco.bairro, operadoras[].endereco.cidade, operadoras[].endereco.unidadeFederativa
Se enviar operadoras[].plano, exige: operadoras[].plano[].nome
Cada item de operadoras[] tem os mesmos campos de POST /operadoras (máx. 50 itens).
| Campo | Tipo | Obrig. | Descrição / restrições |
|---|---|---|---|
operadoras | array<object> | ✅ | máx. itens 50 |
Respostas
201— Todas criadas207— Falha parcial400— Lote vazio ou acima de 50 itens401— Token ausente, inválido, revogado ou expirado403— A chave não tem a permissão exigida pela rota (devolvida emescopoFaltante)429— Já existe um lote em andamento para esta clínica e recurso503— Não foi possível validar a chave no momento — falha de rede/indisponibilidade, não problema com a chave em si
GET /operadoras/{id}
Consultar operadora · Permissão: operadora:read
Parâmetros
| Nome | Onde | Obrig. | Tipo | Descrição / restrições |
|---|---|---|---|---|
id | caminho | ✅ sim | integer | ID da operadora — mín. 1 |
Respostas
200— Operadora400—idinválido401— Token ausente, inválido, revogado ou expirado403— A chave não tem a permissão exigida pela rota (devolvida emescopoFaltante)404— Operadora não encontrada503— Não foi possível validar a chave no momento — falha de rede/indisponibilidade, não problema com a chave em si
PUT /operadoras/{id}
Atualizar operadora · Permissão: operadora:update
Envie as listas completas de plano e contato — o servidor compara com o estado atual e cria, atualiza ou remove pra bater com o que foi enviado.
Parâmetros
| Nome | Onde | Obrig. | Tipo | Descrição / restrições |
|---|---|---|---|---|
id | caminho | ✅ sim | integer | ID da operadora — mín. 1 |
Corpo (application/json) — obrigatório
Campos obrigatórios: nome, descricao, registroANS, cnpj, codigoCNES, endereco, endereco.cep, endereco.endereco, endereco.numero, endereco.bairro, endereco.cidade, endereco.unidadeFederativa
Se enviar plano, exige: plano[].nome
Todos os campos do corpo (24)
| Campo | Tipo | Obrig. | Descrição / restrições |
|---|---|---|---|
nome | string | ✅ | |
descricao | string | ✅ | |
registroANS | string | ✅ | |
cnpj | string | ✅ | |
razaoSocial | string | aceita null | |
codigoCNES | string | ✅ | |
codigoOperadora | string | aceita null | |
im | string | aceita null | |
identificacaoPrestadorXML | string | Como identificar o prestador no XML TISS — o XSD só aceita um dos dois. — valores: CNPJ, CODIGO_NA_OPERADORA; padrão CNPJ | |
endereco | object | ✅ | |
endereco.cep | string | ✅ | |
endereco.endereco | string | ✅ | |
endereco.numero | string | ✅ | |
endereco.complemento | string | aceita null | |
endereco.bairro | string | ✅ | |
endereco.cidade | string | ✅ | |
endereco.unidadeFederativa | string | ✅ | Nome por extenso da UF (não a sigla), precisa bater com um cadastro existente |
contato | array<object> | ||
contato[].pessoaDeContato | string | aceita null | |
contato[].email | string | ||
contato[].telefone | string | ||
contato[].celular | string | ||
plano | array<object> | ||
plano[].nome | string | ✅ |
Respostas
202— Operadora atualizada401— Token ausente, inválido, revogado ou expirado403— A chave não tem a permissão exigida pela rota (devolvida emescopoFaltante)404— Operadora ou Unidade Federativa não encontrada503— Não foi possível validar a chave no momento — falha de rede/indisponibilidade, não problema com a chave em si
DELETE /operadoras/{id}
Desativar operadora · Permissão: operadora:delete
É uma desativação (ativo = false), não uma exclusão física. Recusa (400) se houver convênio ativo vinculado a esta operadora.
Parâmetros
| Nome | Onde | Obrig. | Tipo | Descrição / restrições |
|---|---|---|---|---|
id | caminho | ✅ sim | integer | ID da operadora — mín. 1 |
Respostas
200— Diferente do padrão de outros cadastros (semstatus/aviso).400— Existem convênios ativos vinculados a esta operadora — a mensagem inclui o nome da operadora e a contagem401— Token ausente, inválido, revogado ou expirado403— A chave não tem a permissão exigida pela rota (devolvida emescopoFaltante)503— Não foi possível validar a chave no momento — falha de rede/indisponibilidade, não problema com a chave em si
Fornecedores 5 operações
Fornecedores da clínica.
GET /fornecedores
Listar fornecedores · Permissão: fornecedor:read
Parâmetros
| Nome | Onde | Obrig. | Tipo | Descrição / restrições |
|---|---|---|---|---|
page | query | não | integer | padrão 1; mín. 1 |
pageSize | query | não | integer | padrão 50; mín. 1; máx. 200 |
search | query | não | string | Busca por nome ou CNPJ |
Respostas
200— Lista paginada401— Token ausente, inválido, revogado ou expirado403— A chave não tem a permissão exigida pela rota (devolvida emescopoFaltante)503— Não foi possível validar a chave no momento — falha de rede/indisponibilidade, não problema com a chave em si
POST /fornecedores
Cadastrar fornecedor · Permissão: fornecedor:create
Corpo (application/json) — obrigatório
Campos obrigatórios: nome, cnpj, inscricao, telefoneFornecedor
| Campo | Tipo | Obrig. | Descrição / restrições |
|---|---|---|---|
nome | string | ✅ | |
cnpj | string | ✅ | Com ou sem máscara |
inscricao | string | ✅ | |
telefoneFornecedor | string | ✅ | |
enderecoId | integer | aceita null | |
ativo | boolean | padrão True | |
tipoPrestadorDeServico | string | aceita null |
Respostas
201— Fornecedor criado400— Dados inválidos401— Token ausente, inválido, revogado ou expirado403— A chave não tem a permissão exigida pela rota (devolvida emescopoFaltante)503— Não foi possível validar a chave no momento — falha de rede/indisponibilidade, não problema com a chave em si
POST /fornecedores/bulk
Cadastrar vários fornecedores de uma vez · Permissão: fornecedor:create
Até 50 itens por requisição (chave fornecedores). 207 = falha parcial, ver resultados; reenvie só os itens com erro.
Corpo (application/json) — obrigatório
Campos obrigatórios: fornecedores, fornecedores[].nome, fornecedores[].cnpj, fornecedores[].inscricao, fornecedores[].telefoneFornecedor
Cada item de fornecedores[] tem os mesmos campos de POST /fornecedores (máx. 50 itens).
| Campo | Tipo | Obrig. | Descrição / restrições |
|---|---|---|---|
fornecedores | array<object> | ✅ | máx. itens 50 |
Respostas
201— Todos criados207— Falha parcial400— Lote vazio ou acima de 50 itens401— Token ausente, inválido, revogado ou expirado403— A chave não tem a permissão exigida pela rota (devolvida emescopoFaltante)429— Já existe um lote em andamento para esta clínica e recurso503— Não foi possível validar a chave no momento — falha de rede/indisponibilidade, não problema com a chave em si
GET /fornecedores/{id}
Consultar fornecedor · Permissão: fornecedor:read
Inclui endereço e contatos.
Parâmetros
| Nome | Onde | Obrig. | Tipo | Descrição / restrições |
|---|---|---|---|---|
id | caminho | ✅ sim | integer | ID do fornecedor — mín. 1 |
Respostas
200— Fornecedor401— Token ausente, inválido, revogado ou expirado403— A chave não tem a permissão exigida pela rota (devolvida emescopoFaltante)404— Fornecedor não encontrado503— Não foi possível validar a chave no momento — falha de rede/indisponibilidade, não problema com a chave em si
PUT /fornecedores/{id}
Atualizar fornecedor · Permissão: fornecedor:update
Parâmetros
| Nome | Onde | Obrig. | Tipo | Descrição / restrições |
|---|---|---|---|---|
id | caminho | ✅ sim | integer | ID do fornecedor — mín. 1 |
Corpo (application/json) — obrigatório
Campos obrigatórios: nome, cnpj, inscricao, telefoneFornecedor
| Campo | Tipo | Obrig. | Descrição / restrições |
|---|---|---|---|
nome | string | ✅ | |
cnpj | string | ✅ | Com ou sem máscara |
inscricao | string | ✅ | |
telefoneFornecedor | string | ✅ | |
enderecoId | integer | aceita null | |
ativo | boolean | padrão True | |
tipoPrestadorDeServico | string | aceita null |
Respostas
200— Fornecedor atualizado400— Dados inválidos401— Token ausente, inválido, revogado ou expirado403— A chave não tem a permissão exigida pela rota (devolvida emescopoFaltante)503— Não foi possível validar a chave no momento — falha de rede/indisponibilidade, não problema com a chave em si
Fabricantes 6 operações
Fabricantes de produtos.
GET /fabricantes
Listar fabricantes · Permissão: fabricante:read
Parâmetros
| Nome | Onde | Obrig. | Tipo | Descrição / restrições |
|---|---|---|---|---|
page | query | não | integer | padrão 1; mín. 1 |
pageSize | query | não | integer | padrão 50; mín. 1; máx. 200 |
ativo | query | não | boolean | Sem informar, lista ativos e inativos. |
Respostas
200— Lista paginada401— Token ausente, inválido, revogado ou expirado403— A chave não tem a permissão exigida pela rota (devolvida emescopoFaltante)503— Não foi possível validar a chave no momento — falha de rede/indisponibilidade, não problema com a chave em si
POST /fabricantes
Cadastrar fabricante · Permissão: fabricante:create
Corpo (application/json) — obrigatório
Campos obrigatórios: nome
| Campo | Tipo | Obrig. | Descrição / restrições |
|---|---|---|---|
nome | string | ✅ | |
anexos | array<object> | ||
anexos[].nome | string | ||
anexos[].caminhoArquivo | string |
Respostas
201— Fabricante criado401— Token ausente, inválido, revogado ou expirado403— A chave não tem a permissão exigida pela rota (devolvida emescopoFaltante)422— Falha ao criar fabricante503— Não foi possível validar a chave no momento — falha de rede/indisponibilidade, não problema com a chave em si
POST /fabricantes/bulk
Cadastrar vários fabricantes de uma vez · Permissão: fabricante:create
Até 50 itens por requisição (chave fabricantes). 207 = falha parcial, ver resultados; reenvie só os itens com erro.
Corpo (application/json) — obrigatório
Campos obrigatórios: fabricantes, fabricantes[].nome
Cada item de fabricantes[] tem os mesmos campos de POST /fabricantes (máx. 50 itens).
| Campo | Tipo | Obrig. | Descrição / restrições |
|---|---|---|---|
fabricantes | array<object> | ✅ | máx. itens 50 |
Respostas
201— Todos criados207— Falha parcial400— Lote vazio ou acima de 50 itens401— Token ausente, inválido, revogado ou expirado403— A chave não tem a permissão exigida pela rota (devolvida emescopoFaltante)429— Já existe um lote em andamento para esta clínica e recurso503— Não foi possível validar a chave no momento — falha de rede/indisponibilidade, não problema com a chave em si
GET /fabricantes/{id}
Consultar fabricante · Permissão: fabricante:read
Parâmetros
| Nome | Onde | Obrig. | Tipo | Descrição / restrições |
|---|---|---|---|---|
id | caminho | ✅ sim | integer | ID do fabricante — mín. 1 |
Respostas
200— Fabricante400—idinválido401— Token ausente, inválido, revogado ou expirado403— A chave não tem a permissão exigida pela rota (devolvida emescopoFaltante)404— Fabricante não encontrado503— Não foi possível validar a chave no momento — falha de rede/indisponibilidade, não problema com a chave em si
PUT /fabricantes/{id}
Atualizar fabricante · Permissão: fabricante:update
anexos enviados no corpo vão pra uma tabela separada e não aparecem na resposta.
Parâmetros
| Nome | Onde | Obrig. | Tipo | Descrição / restrições |
|---|---|---|---|---|
id | caminho | ✅ sim | integer | ID do fabricante — mín. 1 |
Corpo (application/json) — obrigatório
Campos obrigatórios: nome
| Campo | Tipo | Obrig. | Descrição / restrições |
|---|---|---|---|
nome | string | ✅ | |
anexos | array<object> | ||
anexos[].nome | string | ||
anexos[].caminhoArquivo | string |
Respostas
202— Fabricante atualizado — row completa, confirmado batendo com o schema Fabricante.401— Token ausente, inválido, revogado ou expirado403— A chave não tem a permissão exigida pela rota (devolvida emescopoFaltante)404— "Failed in Update Fabricante." — mensagem em inglês, inconsistente com o padrão em português do resto da API503— Não foi possível validar a chave no momento — falha de rede/indisponibilidade, não problema com a chave em si
DELETE /fabricantes/{id}
Desativar fabricante · Permissão: fabricante:delete
É uma desativação lógica, não uma exclusão física.
Parâmetros
| Nome | Onde | Obrig. | Tipo | Descrição / restrições |
|---|---|---|---|---|
id | caminho | ✅ sim | integer | ID do fabricante — mín. 1 |
Respostas
200— Corpo de sucesso é o número cru201, não um objeto.401— Token ausente, inválido, revogado ou expirado403— A chave não tem a permissão exigida pela rota (devolvida emescopoFaltante)404— "Failed in Delete Grupo Fabricante." — mensagem parece copy-paste de outro contexto ("Grupo Fabricante" não existe aqui)503— Não foi possível validar a chave no momento — falha de rede/indisponibilidade, não problema com a chave em si
Taxas 6 operações
Taxas cobradas pela clínica.
Cadastre as taxas antes dos convênios e das tabelas de preço (as abas Taxas/Serviços do convênio dependem delas).
GET /taxas
Listar taxas · Permissão: taxa:read
Parâmetros
| Nome | Onde | Obrig. | Tipo | Descrição / restrições |
|---|---|---|---|---|
page | query | não | integer | padrão 1; mín. 1 |
pageSize | query | não | integer | padrão 50; mín. 1; máx. 200 |
ativo | query | não | boolean | Sem informar, lista ativas e inativas. |
Respostas
200— Lista paginada401— Token ausente, inválido, revogado ou expirado403— A chave não tem a permissão exigida pela rota (devolvida emescopoFaltante)503— Não foi possível validar a chave no momento — falha de rede/indisponibilidade, não problema com a chave em si
POST /taxas
Cadastrar taxa · Permissão: taxa:create
Corpo (application/json) — obrigatório
Campos obrigatórios: taxas, codigoTaxa, tipoTaxaId, valor
| Campo | Tipo | Obrig. | Descrição / restrições |
|---|---|---|---|
taxas | string | ✅ | |
descricao | string | aceita null | |
codigoTaxa | string | ✅ | |
tipoTaxaId | integer | ✅ | |
tipoCodigoId | integer | aceita null | |
tabelaANS87ID | integer | aceita null | |
valor | number | ✅ | Em reais (não em centavos) |
Respostas
200— Taxa criada401— Token ausente, inválido, revogado ou expirado403— A chave não tem a permissão exigida pela rota (devolvida emescopoFaltante)422— Erro ao criar taxa (referência inválida)503— Não foi possível validar a chave no momento — falha de rede/indisponibilidade, não problema com a chave em si
POST /taxas/bulk
Cadastrar várias taxas de uma vez · Permissão: taxa:create
Até 50 itens por requisição (chave taxas). 207 = falha parcial, ver resultados; reenvie só os itens com erro.
Corpo (application/json) — obrigatório
Campos obrigatórios: taxas, taxas[].taxas, taxas[].codigoTaxa, taxas[].tipoTaxaId, taxas[].valor
Cada item de taxas[] tem os mesmos campos de POST /taxas (máx. 50 itens).
| Campo | Tipo | Obrig. | Descrição / restrições |
|---|---|---|---|
taxas | array<object> | ✅ | máx. itens 50 |
Respostas
201— Todas criadas207— Falha parcial400— Lote vazio ou acima de 50 itens401— Token ausente, inválido, revogado ou expirado403— A chave não tem a permissão exigida pela rota (devolvida emescopoFaltante)429— Já existe um lote em andamento para esta clínica e recurso503— Não foi possível validar a chave no momento — falha de rede/indisponibilidade, não problema com a chave em si
GET /taxas/{id}
Consultar taxa · Permissão: taxa:read
Parâmetros
| Nome | Onde | Obrig. | Tipo | Descrição / restrições |
|---|---|---|---|---|
id | caminho | ✅ sim | integer | ID da taxa — mín. 1 |
Respostas
200— Taxa400—idinválido401— Token ausente, inválido, revogado ou expirado403— A chave não tem a permissão exigida pela rota (devolvida emescopoFaltante)404— Taxa não encontrada503— Não foi possível validar a chave no momento — falha de rede/indisponibilidade, não problema com a chave em si
PUT /taxas/{id}
Atualizar taxa · Permissão: taxa:update
Parâmetros
| Nome | Onde | Obrig. | Tipo | Descrição / restrições |
|---|---|---|---|---|
id | caminho | ✅ sim | integer | ID da taxa — mín. 1 |
Corpo (application/json) — obrigatório
Campos obrigatórios: taxas, codigoTaxa, tipoTaxaId, valor
| Campo | Tipo | Obrig. | Descrição / restrições |
|---|---|---|---|
taxas | string | ✅ | |
descricao | string | aceita null | |
codigoTaxa | string | ✅ | |
tipoTaxaId | integer | ✅ | |
tipoCodigoId | integer | aceita null | |
tabelaANS87ID | integer | aceita null | |
valor | number | ✅ | Em reais (não em centavos) |
Respostas
200— Taxa atualizada401— Token ausente, inválido, revogado ou expirado403— A chave não tem a permissão exigida pela rota (devolvida emescopoFaltante)422— Erro ao atualizar taxa (referência inválida)503— Não foi possível validar a chave no momento — falha de rede/indisponibilidade, não problema com a chave em si
DELETE /taxas/{id}
Desativar taxa · Permissão: taxa:delete
É uma desativação lógica — mas diferente dos outros cadastros, o model Taxas não tem campo ativo; usa delete: true (mapeado pra coluna deleted), é o único recurso desta lista que funciona assim. Recusa com 409 se a taxa estiver na composição de algum serviço ativo: a resposta traz a lista em servicos; corrija a composição e tente de novo. Serviço inativo não bloqueia.
Parâmetros
| Nome | Onde | Obrig. | Tipo | Descrição / restrições |
|---|---|---|---|---|
id | caminho | ✅ sim | integer | ID da taxa — mín. 1 |
Respostas
200— Corpo de sucesso é o número cru201, não um objeto.401— Token ausente, inválido, revogado ou expirado403— A chave não tem a permissão exigida pela rota (devolvida emescopoFaltante)404— Taxa não encontrada409— Taxa na composição de serviço ativo422— Erro ao excluir taxa503— Não foi possível validar a chave no momento — falha de rede/indisponibilidade, não problema com a chave em si
Produtos 6 operações
Produtos/materiais da clínica.
Catálogo de produtos antes dos serviços (a composição do serviço aponta para o produto). Exige depósito, fabricante, tipo de produto e unidade de medida.
GET /produtos
Listar produtos · Permissão: produto:read
Parâmetros
| Nome | Onde | Obrig. | Tipo | Descrição / restrições |
|---|---|---|---|---|
page | query | não | integer | padrão 1; mín. 1 |
pageSize | query | não | integer | padrão 50; mín. 1; máx. 200 |
ativo | query | não | boolean | Sem informar, lista ativos e inativos. |
nome | query | não | string | Filtro por nome (contém, sem diferenciar maiúsculas) |
Respostas
200— Lista paginada401— Token ausente, inválido, revogado ou expirado403— A chave não tem a permissão exigida pela rota (devolvida emescopoFaltante)503— Não foi possível validar a chave no momento — falha de rede/indisponibilidade, não problema com a chave em si
POST /produtos
Cadastrar produto · Permissão: produto:create
Corpo (application/json) — obrigatório
Campos obrigatórios: nome, codigoProduto, apresentacao, contendo, depositoId, tipoProdutoId, fabricanteId, unidadeDeMedidaId, prazoDeReposicao
Todos os campos do corpo (22)
| Campo | Tipo | Obrig. | Descrição / restrições |
|---|---|---|---|
nome | string | ✅ | |
codigoProduto | string | ✅ | Até 10 caracteres: letras, números, ponto, hífen ou barra (TISS st_texto10) |
codigoEAN | string | GTIN com 8, 12, 13 ou 14 dígitos, como texto (preserva zeros à esquerda). Number ainda é aceito por compatibilidade, mas perde zeros à esquerda. — aceita null | |
codigoNCM | string | NCM com exatamente 8 dígitos, como texto. Number ainda é aceito por compatibilidade, mas perde zeros à esquerda. — aceita null | |
apresentacao | string | ✅ | |
contendo | integer | ✅ | Quantidade na embalagem |
depositoId | integer | ✅ | |
tipoProdutoId | integer | ✅ | |
fabricanteId | integer | ✅ | |
principioAtivoId | integer | aceita null | |
unidadeDeMedidaId | integer | ✅ | |
cdId | integer | aceita null | |
tipoCodigoId | integer | aceita null | |
tabelaANS87ID | integer | aceita null | |
estoquePodeNegativar | boolean | padrão False | |
prazoDeReposicao | integer | ✅ | Em dias |
precoUltimaPesquisa | number | aceita null | |
dataUltimaPesquisa | string (date-time) | aceita null | |
fornecedores | array<integer> | IDs dos fornecedores | |
anexos | array<object> | ||
anexos[].nome | string | aceita null | |
anexos[].caminhoArquivo | string | Referência a um arquivo já enviado — esta API não faz upload de anexo de produto. — aceita null |
Respostas
201— Produto criado401— Token ausente, inválido, revogado ou expirado403— A chave não tem a permissão exigida pela rota (devolvida emescopoFaltante)422— Falha ao criar produto (referência inválida)503— Não foi possível validar a chave no momento — falha de rede/indisponibilidade, não problema com a chave em si
POST /produtos/bulk
Cadastrar vários produtos de uma vez · Permissão: produto:create
Até 50 itens por requisição (chave produtos). 207 = falha parcial, ver resultados; reenvie só os itens com erro.
Corpo (application/json) — obrigatório
Campos obrigatórios: produtos, produtos[].nome, produtos[].codigoProduto, produtos[].apresentacao, produtos[].contendo, produtos[].depositoId, produtos[].tipoProdutoId, produtos[].fabricanteId, produtos[].unidadeDeMedidaId, produtos[].prazoDeReposicao
Cada item de produtos[] tem os mesmos campos de POST /produtos (máx. 50 itens).
| Campo | Tipo | Obrig. | Descrição / restrições |
|---|---|---|---|
produtos | array<object> | ✅ | máx. itens 50 |
Respostas
201— Todos criados207— Falha parcial400— Lote vazio ou acima de 50 itens401— Token ausente, inválido, revogado ou expirado403— A chave não tem a permissão exigida pela rota (devolvida emescopoFaltante)429— Já existe um lote em andamento para esta clínica e recurso503— Não foi possível validar a chave no momento — falha de rede/indisponibilidade, não problema com a chave em si
GET /produtos/{id}
Consultar produto · Permissão: produto:read
Parâmetros
| Nome | Onde | Obrig. | Tipo | Descrição / restrições |
|---|---|---|---|---|
id | caminho | ✅ sim | integer | ID do produto — mín. 1 |
Respostas
200— Produto400—idinválido401— Token ausente, inválido, revogado ou expirado403— A chave não tem a permissão exigida pela rota (devolvida emescopoFaltante)404— Produto não encontrado503— Não foi possível validar a chave no momento — falha de rede/indisponibilidade, não problema com a chave em si
PUT /produtos/{id}
Atualizar produto · Permissão: produto:update
Status HTTP real é 200, não 202. Devolve a row crua do Prisma (update sem include) — FKs como fabricanteId/tipoProdutoId/depositoId/etc aparecem como inteiros, não como os objetos aninhados que o schema Produto usa nas rotas de leitura (aquele formato só existe nos GETs, que fazem include). fornecedores e anexos enviados no corpo são persistidos, mas não aparecem na resposta.
Parâmetros
| Nome | Onde | Obrig. | Tipo | Descrição / restrições |
|---|---|---|---|---|
id | caminho | ✅ sim | integer | ID do produto — mín. 1 |
Corpo (application/json) — obrigatório
Campos obrigatórios: nome, codigoProduto, apresentacao, contendo, depositoId, tipoProdutoId, fabricanteId, unidadeDeMedidaId, prazoDeReposicao
Todos os campos do corpo (22)
| Campo | Tipo | Obrig. | Descrição / restrições |
|---|---|---|---|
nome | string | ✅ | |
codigoProduto | string | ✅ | Até 10 caracteres: letras, números, ponto, hífen ou barra (TISS st_texto10) |
codigoEAN | string | GTIN com 8, 12, 13 ou 14 dígitos, como texto (preserva zeros à esquerda). Number ainda é aceito por compatibilidade, mas perde zeros à esquerda. — aceita null | |
codigoNCM | string | NCM com exatamente 8 dígitos, como texto. Number ainda é aceito por compatibilidade, mas perde zeros à esquerda. — aceita null | |
apresentacao | string | ✅ | |
contendo | integer | ✅ | Quantidade na embalagem |
depositoId | integer | ✅ | |
tipoProdutoId | integer | ✅ | |
fabricanteId | integer | ✅ | |
principioAtivoId | integer | aceita null | |
unidadeDeMedidaId | integer | ✅ | |
cdId | integer | aceita null | |
tipoCodigoId | integer | aceita null | |
tabelaANS87ID | integer | aceita null | |
estoquePodeNegativar | boolean | padrão False | |
prazoDeReposicao | integer | ✅ | Em dias |
precoUltimaPesquisa | number | aceita null | |
dataUltimaPesquisa | string (date-time) | aceita null | |
fornecedores | array<integer> | IDs dos fornecedores | |
anexos | array<object> | ||
anexos[].nome | string | aceita null | |
anexos[].caminhoArquivo | string | Referência a um arquivo já enviado — esta API não faz upload de anexo de produto. — aceita null |
Respostas
200— Row crua de Produto, sem includes — ver descrição.401— Token ausente, inválido, revogado ou expirado403— A chave não tem a permissão exigida pela rota (devolvida emescopoFaltante)409—ativo: falserecusado: produto na composição de serviço ativo503— Não foi possível validar a chave no momento — falha de rede/indisponibilidade, não problema com a chave em si
DELETE /produtos/{id}
Desativar produto · Permissão: produto:delete
É uma desativação (ativo = false), não uma exclusão física. Também desativa os fornecedores vinculados e remove a configuração de estoque do produto (hard delete). Recusa com 409 se o produto estiver na composição de algum serviço ativo: a resposta traz a lista em servicos; corrija a composição (substitua ou retire o produto) e tente de novo. Serviço inativo não bloqueia. O mesmo bloqueio vale para PUT /produtos/{id} com ativo: false.
Parâmetros
| Nome | Onde | Obrig. | Tipo | Descrição / restrições |
|---|---|---|---|---|
id | caminho | ✅ sim | integer | ID do produto — mín. 1 |
Respostas
200— Corpo de sucesso é o número cru201, não um objeto.401— Token ausente, inválido, revogado ou expirado403— A chave não tem a permissão exigida pela rota (devolvida emescopoFaltante)404— Produto não encontrado409— Produto na composição de serviço ativo500— Erro ao excluir produto503— Não foi possível validar a chave no momento — falha de rede/indisponibilidade, não problema com a chave em si
Equipamentos 6 operações
Equipamentos da clínica.
GET /equipamentos
Listar equipamentos · Permissão: equipamento:read
Parâmetros
| Nome | Onde | Obrig. | Tipo | Descrição / restrições |
|---|---|---|---|---|
page | query | não | integer | padrão 1; mín. 1 |
pageSize | query | não | integer | padrão 50; mín. 1; máx. 200 |
ativo | query | não | boolean | Sem informar, lista ativos e inativos. |
Respostas
200— Lista paginada401— Token ausente, inválido, revogado ou expirado403— A chave não tem a permissão exigida pela rota (devolvida emescopoFaltante)503— Não foi possível validar a chave no momento — falha de rede/indisponibilidade, não problema com a chave em si
POST /equipamentos
Cadastrar equipamento · Permissão: equipamento:create
Recusa (409) se já existir um equipamento ativo com o mesmo nome.
Corpo (application/json) — obrigatório
Campos obrigatórios: nome
| Campo | Tipo | Obrig. | Descrição / restrições |
|---|---|---|---|
nome | string | ✅ |
Respostas
201— Equipamento criado401— Token ausente, inválido, revogado ou expirado403— A chave não tem a permissão exigida pela rota (devolvida emescopoFaltante)409— Este equipamento já foi cadastrado503— Não foi possível validar a chave no momento — falha de rede/indisponibilidade, não problema com a chave em si
POST /equipamentos/bulk
Cadastrar vários equipamentos de uma vez · Permissão: equipamento:create
Até 50 itens por requisição (chave equipamentos). 207 = falha parcial, ver resultados; reenvie só os itens com erro.
Corpo (application/json) — obrigatório
Campos obrigatórios: equipamentos, equipamentos[].nome
Cada item de equipamentos[] tem os mesmos campos de POST /equipamentos (máx. 50 itens).
| Campo | Tipo | Obrig. | Descrição / restrições |
|---|---|---|---|
equipamentos | array<object> | ✅ | máx. itens 50 |
Respostas
201— Todos criados207— Falha parcial400— Lote vazio ou acima de 50 itens401— Token ausente, inválido, revogado ou expirado403— A chave não tem a permissão exigida pela rota (devolvida emescopoFaltante)429— Já existe um lote em andamento para esta clínica e recurso503— Não foi possível validar a chave no momento — falha de rede/indisponibilidade, não problema com a chave em si
GET /equipamentos/{id}
Consultar equipamento · Permissão: equipamento:read
Parâmetros
| Nome | Onde | Obrig. | Tipo | Descrição / restrições |
|---|---|---|---|---|
id | caminho | ✅ sim | integer | ID do equipamento — mín. 1 |
Respostas
200— Equipamento401— Token ausente, inválido, revogado ou expirado403— A chave não tem a permissão exigida pela rota (devolvida emescopoFaltante)404— Equipamento não encontrado503— Não foi possível validar a chave no momento — falha de rede/indisponibilidade, não problema com a chave em si
PUT /equipamentos/{id}
Atualizar equipamento · Permissão: equipamento:update
Recusa (422) se já existir outro equipamento ativo com o mesmo nome.
Parâmetros
| Nome | Onde | Obrig. | Tipo | Descrição / restrições |
|---|---|---|---|---|
id | caminho | ✅ sim | integer | ID do equipamento — mín. 1 |
Corpo (application/json) — obrigatório
Campos obrigatórios: nome
| Campo | Tipo | Obrig. | Descrição / restrições |
|---|---|---|---|
nome | string | ✅ |
Respostas
202— Equipamento atualizado401— Token ausente, inválido, revogado ou expirado403— A chave não tem a permissão exigida pela rota (devolvida emescopoFaltante)422— Nome já usado por outro equipamento503— Não foi possível validar a chave no momento — falha de rede/indisponibilidade, não problema com a chave em si
DELETE /equipamentos/{id}
Desativar equipamento · Permissão: equipamento:delete
É uma desativação (ativo = false), não uma exclusão física.
Parâmetros
| Nome | Onde | Obrig. | Tipo | Descrição / restrições |
|---|---|---|---|---|
id | caminho | ✅ sim | integer | ID do equipamento — mín. 1 |
Respostas
200— Corpo de sucesso é o número cru201, não um objeto.401— Token ausente, inválido, revogado ou expirado403— A chave não tem a permissão exigida pela rota (devolvida emescopoFaltante)404— Equipamento não encontrado503— Não foi possível validar a chave no momento — falha de rede/indisponibilidade, não problema com a chave em si
Serviços 6 operações
Serviços oferecidos pela clínica.
Cadastre subserviços antes dos serviços que os contêm (servicosRelacionados recebe ids já existentes). PUT /servicos/{id} exige o objeto completo.
GET /servicos
Listar serviços · Permissão: servico:read
Parâmetros
| Nome | Onde | Obrig. | Tipo | Descrição / restrições |
|---|---|---|---|---|
page | query | não | integer | padrão 1; mín. 1 |
pageSize | query | não | integer | padrão 50; mín. 1; máx. 200 |
ativo | query | não | boolean | Sem informar, lista ativos e inativos. |
nome | query | não | string | Filtro por nome (contém, sem diferenciar maiúsculas) |
Respostas
200— Lista paginada (versão resumida de cada serviço)401— Token ausente, inválido, revogado ou expirado403— A chave não tem a permissão exigida pela rota (devolvida emescopoFaltante)503— Não foi possível validar a chave no momento — falha de rede/indisponibilidade, não problema com a chave em si
POST /servicos
Cadastrar serviço · Permissão: servico:create
Corpo (application/json) — obrigatório
Campos obrigatórios: nome, descricao
Se enviar documentos, exige: documentos[].id
Se enviar servicoTaxa, exige: servicoTaxa[].taxaId
Todos os campos do corpo (28)
| Campo | Tipo | Obrig. | Descrição / restrições |
|---|---|---|---|
nome | string | ✅ | |
descricao | string | ✅ | |
codigo | string | aceita null | |
codigoTUSS | string | aceita null | |
valor | number | Em reais (não em centavos). | |
tempoServico | number | Duração em minutos — aceita null | |
somarItems | boolean | Se true, o valor é calculado somando os itens vinculados em vez do valor informado. — padrão False | |
linkAuxiliar | string | aceita null | |
preparamentos | string | aceita null | |
preparo | string | aceita null | |
tipoServicoId | integer | aceita null | |
tipoCodigoId | integer | aceita null | |
tipoGuiaId | integer | aceita null | |
tabelaANS87ID | integer | aceita null | |
regimeDeAtendimentoId | integer | aceita null | |
tipoAtendimento | integer | ID do tipo de atendimento — aceita null | |
especialidadesId | array<integer> | ||
documentos | array<object> | Documentos obrigatórios do serviço (ex.: PRESCRIÇÃO MÉDICA) — exigidos no agendamento, acolhimento, autorização e pela IA. No PUT, lista enviada substitui; omitida mantém. | |
documentos[].id | integer | ✅ | ID do documento |
perfilFiscalId | string | Perfil fiscal (NFS-e) do serviço. null desvincula; omitido mantém (no PUT). — aceita null | |
produtoIds | array<object> | ID do produto (quantidade 1) ou objeto com quantidade/valor. | |
equipamentoIds | array<object> | ||
servicosRelacionados | array<object> | Serviços que compõem este serviço: ID (quantidade 1) ou objeto com quantidade. | |
servicoTaxa | array<object> | Taxas vinculadas ao serviço. | |
servicoTaxa[].taxaId | integer | ✅ | |
servicoTaxa[].quantidade | number | padrão 1 | |
habilitarAgendamentoOnline | boolean | padrão False | |
apenasComColaboradorDesignado | boolean | padrão False |
Respostas
201— Serviço criado401— Token ausente, inválido, revogado ou expirado403— A chave não tem a permissão exigida pela rota (devolvida emescopoFaltante)503— Não foi possível validar a chave no momento — falha de rede/indisponibilidade, não problema com a chave em si
POST /servicos/bulk
Cadastrar vários serviços de uma vez · Permissão: servico:create
Até 50 itens por requisição (chave servicos). 207 = falha parcial, ver resultados; reenvie só os itens com erro.
Corpo (application/json) — obrigatório
Campos obrigatórios: servicos, servicos[].nome, servicos[].descricao
Se enviar servicos[].documentos, exige: servicos[].documentos[].id
Se enviar servicos[].servicoTaxa, exige: servicos[].servicoTaxa[].taxaId
Cada item de servicos[] tem os mesmos campos de POST /servicos (máx. 50 itens).
| Campo | Tipo | Obrig. | Descrição / restrições |
|---|---|---|---|
servicos | array<object> | ✅ | máx. itens 50 |
Respostas
201— Todos criados207— Falha parcial400— Lote vazio ou acima de 50 itens401— Token ausente, inválido, revogado ou expirado403— A chave não tem a permissão exigida pela rota (devolvida emescopoFaltante)429— Já existe um lote em andamento para esta clínica e recurso503— Não foi possível validar a chave no momento — falha de rede/indisponibilidade, não problema com a chave em si
GET /servicos/{id}
Consultar serviço · Permissão: servico:read
Traz o serviço completo, incluindo composição (servicosRelacionados), especialidades (especialidadesId), documentos obrigatórios (documentos), produtos (produtoIds, valor em reais), equipamentos (equipamentoIds) e taxas (servicoTaxa) — com os mesmos nomes que o PUT aceita (também somarItems, procedimentos, tipoAtendimento, perfilFiscalId). Ler e reenviar sem alterar não muda nada.
Parâmetros
| Nome | Onde | Obrig. | Tipo | Descrição / restrições |
|---|---|---|---|---|
id | caminho | ✅ sim | integer | ID do serviço — mín. 1 |
Respostas
200— Serviço401— Token ausente, inválido, revogado ou expirado403— A chave não tem a permissão exigida pela rota (devolvida emescopoFaltante)404— Serviço não encontrado503— Não foi possível validar a chave no momento — falha de rede/indisponibilidade, não problema com a chave em si
PUT /servicos/{id}
Atualizar serviço · Permissão: servico:update
Atualização parcial: envie só o que quer mudar — todos os campos são opcionais.
- Campo omitido: mantém o valor atual.
null: limpa o campo (ex.:linkAuxiliar: null,perfilFiscalId: null;valor: nullvira 0).- Lista omitida (
documentos,produtoIds,equipamentoIds,servicoTaxa,especialidadesId,servicosRelacionados): mantém os vínculos atuais. - Lista enviada: substitui os vínculos por exatamente o que veio. Para remover todos, envie
[].
Ex.: { "nome": "X" } só renomeia; { "documentos": [{ "id": 3 }] } deixa só o documento 3.
Parâmetros
| Nome | Onde | Obrig. | Tipo | Descrição / restrições |
|---|---|---|---|---|
id | caminho | ✅ sim | integer | ID do serviço — mín. 1 |
Corpo (application/json) — obrigatório
Campos obrigatórios: nome, descricao
Se enviar documentos, exige: documentos[].id
Se enviar servicoTaxa, exige: servicoTaxa[].taxaId
Todos os campos do corpo (28)
| Campo | Tipo | Obrig. | Descrição / restrições |
|---|---|---|---|
nome | string | ✅ | |
descricao | string | ✅ | |
codigo | string | aceita null | |
codigoTUSS | string | aceita null | |
valor | number | Em reais (não em centavos). | |
tempoServico | number | Duração em minutos — aceita null | |
somarItems | boolean | Se true, o valor é calculado somando os itens vinculados em vez do valor informado. — padrão False | |
linkAuxiliar | string | aceita null | |
preparamentos | string | aceita null | |
preparo | string | aceita null | |
tipoServicoId | integer | aceita null | |
tipoCodigoId | integer | aceita null | |
tipoGuiaId | integer | aceita null | |
tabelaANS87ID | integer | aceita null | |
regimeDeAtendimentoId | integer | aceita null | |
tipoAtendimento | integer | ID do tipo de atendimento — aceita null | |
especialidadesId | array<integer> | ||
documentos | array<object> | Documentos obrigatórios do serviço (ex.: PRESCRIÇÃO MÉDICA) — exigidos no agendamento, acolhimento, autorização e pela IA. No PUT, lista enviada substitui; omitida mantém. | |
documentos[].id | integer | ✅ | ID do documento |
perfilFiscalId | string | Perfil fiscal (NFS-e) do serviço. null desvincula; omitido mantém (no PUT). — aceita null | |
produtoIds | array<object> | ID do produto (quantidade 1) ou objeto com quantidade/valor. | |
equipamentoIds | array<object> | ||
servicosRelacionados | array<object> | Serviços que compõem este serviço: ID (quantidade 1) ou objeto com quantidade. | |
servicoTaxa | array<object> | Taxas vinculadas ao serviço. | |
servicoTaxa[].taxaId | integer | ✅ | |
servicoTaxa[].quantidade | number | padrão 1 | |
habilitarAgendamentoOnline | boolean | padrão False | |
apenasComColaboradorDesignado | boolean | padrão False |
Respostas
202— Serviço atualizado401— Token ausente, inválido, revogado ou expirado403— A chave não tem a permissão exigida pela rota (devolvida emescopoFaltante)503— Não foi possível validar a chave no momento — falha de rede/indisponibilidade, não problema com a chave em si
DELETE /servicos/{id}
Desativar serviço · Permissão: servico:delete
É uma desativação (ativo = false), não uma exclusão física.
Parâmetros
| Nome | Onde | Obrig. | Tipo | Descrição / restrições |
|---|---|---|---|---|
id | caminho | ✅ sim | integer | ID do serviço — mín. 1 |
Respostas
200— Corpo de sucesso é o número cru201, não um objeto.401— Token ausente, inválido, revogado ou expirado403— A chave não tem a permissão exigida pela rota (devolvida emescopoFaltante)404— Serviço não encontrado503— Não foi possível validar a chave no momento — falha de rede/indisponibilidade, não problema com a chave em si
Colaboradores 7 operações
Profissionais/equipe da clínica.
POST /colaboradores só cadastra — o login de verdade é criado por POST /colaboradores/{id}/usuario.
GET /colaboradores
Listar colaboradores · Permissão: colaborador:read
Parâmetros
| Nome | Onde | Obrig. | Tipo | Descrição / restrições |
|---|---|---|---|---|
page | query | não | integer | padrão 1; mín. 1 |
pageSize | query | não | integer | padrão 50; mín. 1; máx. 200 |
ativo | query | não | boolean | Sem informar, lista ativos e inativos. |
Respostas
200— Lista paginada401— Token ausente, inválido, revogado ou expirado403— A chave não tem a permissão exigida pela rota (devolvida emescopoFaltante)503— Não foi possível validar a chave no momento — falha de rede/indisponibilidade, não problema com a chave em si
POST /colaboradores
Cadastrar colaborador · Permissão: colaborador:create
Não cria acesso de login ao sistema — só o cadastro.
Corpo (application/json) — obrigatório
Campos obrigatórios: nome, cpf, dataDeNascimento, sexoId, telefone, celular, email, endereco, endereco.cep, endereco.endereco, endereco.numero, endereco.bairro, endereco.cidade, endereco.unidadeFederativa
Se enviar conselho, exige: conselho[].uf, conselho[].descricao, conselho[].registroConselho
Se enviar especialidades, exige: especialidades[].uf, especialidades[].numeroConselho, especialidades[].especialidadeId, especialidades[].conselhoProfissionalId
Se enviar vinculoRepasse.produtos, exige: vinculoRepasse.produtos[].valorPercentual, vinculoRepasse.produtos[].valorMonetario, vinculoRepasse.produtos[].tipoCalculo
Se enviar vinculoRepasse.servicos, exige: vinculoRepasse.servicos[].valorPercentual, vinculoRepasse.servicos[].valorMonetario, vinculoRepasse.servicos[].tipoCalculo
Se enviar vinculoRepasse.taxas, exige: vinculoRepasse.taxas[].valorPercentual, vinculoRepasse.taxas[].valorMonetario, vinculoRepasse.taxas[].tipoCalculo
Todos os campos do corpo (55)
| Campo | Tipo | Obrig. | Descrição / restrições |
|---|---|---|---|
nome | string | ✅ | |
cpf | string | ✅ | |
dataDeNascimento | string (date) | ✅ | |
sexoId | integer | ✅ | |
telefone | string | ✅ | |
telefone2 | string | aceita null | |
celular | string | ✅ | |
celular2 | string | aceita null | |
email | string | ✅ | |
email2 | string | aceita null | |
mensagem | string | aceita null | |
corNaAgenda | string | aceita null | |
empresas | array<integer> | IDs das empresas/unidades onde o colaborador atua | |
endereco | object | ✅ | |
endereco.cep | string | ✅ | |
endereco.endereco | string | ✅ | |
endereco.numero | string | ✅ | |
endereco.complemento | string | aceita null | |
endereco.bairro | string | ✅ | |
endereco.cidade | string | ✅ | |
endereco.unidadeFederativa | string | ✅ | Nome por extenso da UF, não a sigla |
conselho | array<object> | ||
conselho[].uf | integer | ✅ | ID da Unidade Federativa |
conselho[].descricao | string | ✅ | |
conselho[].registroConselho | string | ✅ | |
especialidades | array<object> | ||
especialidades[].rqe | string | aceita null | |
especialidades[].uf | integer | ✅ | ID da Unidade Federativa |
especialidades[].numeroConselho | string | ✅ | |
especialidades[].especialidadeId | string | ✅ | |
especialidades[].idadeMinimaAtendimento | integer | aceita null | |
especialidades[].idadeMaximaAtendimento | integer | aceita null | |
especialidades[].anamnesePadrao | string | aceita null | |
especialidades[].evolucaoPadrao | string | aceita null | |
especialidades[].observacoes | string | aceita null | |
especialidades[].conselhoProfissionalId | integer | ✅ | |
vinculoRepasse | object | Regras de comissão/repasse do colaborador. Em cada lista, o item vazio (servico/produto/taxa omitido ou null) é a linha geral do tipo: vale para todo item que não tenha linha própria. No máximo uma linha geral por tipo (400 se vier mais de uma). A linha específica substitui a geral para aquele item; específica com 0 e 0% = sem repasse naquele item. Tipo sem nenhuma linha = sem repasse. | |
vinculoRepasse.tipoVinculo | string | ||
vinculoRepasse.produtos | array<object> | ||
vinculoRepasse.produtos[].valorPercentual | number | ✅ | |
vinculoRepasse.produtos[].valorMonetario | number | ✅ | |
vinculoRepasse.produtos[].tipoCalculo | string | ✅ | |
vinculoRepasse.produtos[].tipoProduto | integer | ||
vinculoRepasse.produtos[].material | integer | ||
vinculoRepasse.produtos[].produto | integer | Produto da linha; vazio = todos os produtos (linha geral). — aceita null | |
vinculoRepasse.servicos | array<object> | ||
vinculoRepasse.servicos[].valorPercentual | number | ✅ | |
vinculoRepasse.servicos[].valorMonetario | number | ✅ | |
vinculoRepasse.servicos[].tipoCalculo | string | ✅ | |
vinculoRepasse.servicos[].servico | integer | Serviço da linha; vazio = todos os serviços (linha geral). — aceita null | |
vinculoRepasse.taxas | array<object> | ||
vinculoRepasse.taxas[].valorPercentual | number | ✅ | |
vinculoRepasse.taxas[].valorMonetario | number | ✅ | |
vinculoRepasse.taxas[].tipoCalculo | string | ✅ | |
vinculoRepasse.taxas[].taxa | integer | Taxa da linha; vazio = todas as taxas (linha geral). — aceita null |
Respostas
201— Colaborador criado401— Token ausente, inválido, revogado ou expirado403— A chave não tem a permissão exigida pela rota (devolvida emescopoFaltante)503— Não foi possível validar a chave no momento — falha de rede/indisponibilidade, não problema com a chave em si
POST /colaboradores/bulk
Cadastrar vários colaboradores de uma vez · Permissão: colaborador:create
Até 50 itens por requisição (chave colaboradores). 207 = falha parcial, ver resultados; reenvie só os itens com erro. Não cria acesso de login.
Corpo (application/json) — obrigatório
Campos obrigatórios: colaboradores, colaboradores[].nome, colaboradores[].cpf, colaboradores[].dataDeNascimento, colaboradores[].sexoId, colaboradores[].telefone, colaboradores[].celular, colaboradores[].email, colaboradores[].endereco, colaboradores[].endereco.cep, colaboradores[].endereco.endereco, colaboradores[].endereco.numero, colaboradores[].endereco.bairro, colaboradores[].endereco.cidade, colaboradores[].endereco.unidadeFederativa
Se enviar colaboradores[].conselho, exige: colaboradores[].conselho[].uf, colaboradores[].conselho[].descricao, colaboradores[].conselho[].registroConselho
Se enviar colaboradores[].especialidades, exige: colaboradores[].especialidades[].uf, colaboradores[].especialidades[].numeroConselho, colaboradores[].especialidades[].especialidadeId, colaboradores[].especialidades[].conselhoProfissionalId
Se enviar colaboradores[].vinculoRepasse.produtos, exige: colaboradores[].vinculoRepasse.produtos[].valorPercentual, colaboradores[].vinculoRepasse.produtos[].valorMonetario, colaboradores[].vinculoRepasse.produtos[].tipoCalculo
Se enviar colaboradores[].vinculoRepasse.servicos, exige: colaboradores[].vinculoRepasse.servicos[].valorPercentual, colaboradores[].vinculoRepasse.servicos[].valorMonetario, colaboradores[].vinculoRepasse.servicos[].tipoCalculo
Se enviar colaboradores[].vinculoRepasse.taxas, exige: colaboradores[].vinculoRepasse.taxas[].valorPercentual, colaboradores[].vinculoRepasse.taxas[].valorMonetario, colaboradores[].vinculoRepasse.taxas[].tipoCalculo
Cada item de colaboradores[] tem os mesmos campos de POST /colaboradores (máx. 50 itens).
| Campo | Tipo | Obrig. | Descrição / restrições |
|---|---|---|---|
colaboradores | array<object> | ✅ | máx. itens 50 |
Respostas
201— Todos criados207— Falha parcial400— Lote vazio ou acima de 50 itens401— Token ausente, inválido, revogado ou expirado403— A chave não tem a permissão exigida pela rota (devolvida emescopoFaltante)429— Já existe um lote em andamento para esta clínica e recurso503— Não foi possível validar a chave no momento — falha de rede/indisponibilidade, não problema com a chave em si
GET /colaboradores/{id}
Consultar colaborador · Permissão: colaborador:read
Parâmetros
| Nome | Onde | Obrig. | Tipo | Descrição / restrições |
|---|---|---|---|---|
id | caminho | ✅ sim | integer | ID do colaborador — mín. 1 |
Respostas
200— Colaborador400—idinválido401— Token ausente, inválido, revogado ou expirado403— A chave não tem a permissão exigida pela rota (devolvida emescopoFaltante)404— Colaborador não encontrado503— Não foi possível validar a chave no momento — falha de rede/indisponibilidade, não problema com a chave em si
PUT /colaboradores/{id}
Atualizar colaborador · Permissão: colaborador:update
Não devolve o colaborador atualizado — o corpo de sucesso é o número cru 201. É a exceção real dentro do padrão "PUT devolve o recurso" usado no resto da API.
Atualização parcial: campo omitido mantém o valor atual; null limpa; lista omitida mantém; lista enviada substitui ([] apaga).
- Não reativa colaborador desativado.
vinculoRepasse:tipoVinculoomitido mantém (nulldesvincula);produtos,servicosetaxassão trocadas só quando enviadas.perguntasIdsomitido mantém.endereco: aceita os nomes da leitura (Cep,Endereco,Numero...) eunidadeFederativaId; sem UF mantém a atual.- O
GET /colaboradores/{id}devolveperguntasIds,vinculoRepasseemensagemno formato destePUT.
Parâmetros
| Nome | Onde | Obrig. | Tipo | Descrição / restrições |
|---|---|---|---|---|
id | caminho | ✅ sim | integer | ID do colaborador — mín. 1 |
Corpo (application/json) — obrigatório
Campos obrigatórios: nome, cpf, dataDeNascimento, sexoId, telefone, celular, email, endereco, endereco.cep, endereco.endereco, endereco.numero, endereco.bairro, endereco.cidade, endereco.unidadeFederativa
Se enviar conselho, exige: conselho[].uf, conselho[].descricao, conselho[].registroConselho
Se enviar especialidades, exige: especialidades[].uf, especialidades[].numeroConselho, especialidades[].especialidadeId, especialidades[].conselhoProfissionalId
Se enviar vinculoRepasse.produtos, exige: vinculoRepasse.produtos[].valorPercentual, vinculoRepasse.produtos[].valorMonetario, vinculoRepasse.produtos[].tipoCalculo
Se enviar vinculoRepasse.servicos, exige: vinculoRepasse.servicos[].valorPercentual, vinculoRepasse.servicos[].valorMonetario, vinculoRepasse.servicos[].tipoCalculo
Se enviar vinculoRepasse.taxas, exige: vinculoRepasse.taxas[].valorPercentual, vinculoRepasse.taxas[].valorMonetario, vinculoRepasse.taxas[].tipoCalculo
Todos os campos do corpo (55)
| Campo | Tipo | Obrig. | Descrição / restrições |
|---|---|---|---|
nome | string | ✅ | |
cpf | string | ✅ | |
dataDeNascimento | string (date) | ✅ | |
sexoId | integer | ✅ | |
telefone | string | ✅ | |
telefone2 | string | aceita null | |
celular | string | ✅ | |
celular2 | string | aceita null | |
email | string | ✅ | |
email2 | string | aceita null | |
mensagem | string | aceita null | |
corNaAgenda | string | aceita null | |
empresas | array<integer> | IDs das empresas/unidades onde o colaborador atua | |
endereco | object | ✅ | |
endereco.cep | string | ✅ | |
endereco.endereco | string | ✅ | |
endereco.numero | string | ✅ | |
endereco.complemento | string | aceita null | |
endereco.bairro | string | ✅ | |
endereco.cidade | string | ✅ | |
endereco.unidadeFederativa | string | ✅ | Nome por extenso da UF, não a sigla |
conselho | array<object> | ||
conselho[].uf | integer | ✅ | ID da Unidade Federativa |
conselho[].descricao | string | ✅ | |
conselho[].registroConselho | string | ✅ | |
especialidades | array<object> | ||
especialidades[].rqe | string | aceita null | |
especialidades[].uf | integer | ✅ | ID da Unidade Federativa |
especialidades[].numeroConselho | string | ✅ | |
especialidades[].especialidadeId | string | ✅ | |
especialidades[].idadeMinimaAtendimento | integer | aceita null | |
especialidades[].idadeMaximaAtendimento | integer | aceita null | |
especialidades[].anamnesePadrao | string | aceita null | |
especialidades[].evolucaoPadrao | string | aceita null | |
especialidades[].observacoes | string | aceita null | |
especialidades[].conselhoProfissionalId | integer | ✅ | |
vinculoRepasse | object | Regras de comissão/repasse do colaborador. Em cada lista, o item vazio (servico/produto/taxa omitido ou null) é a linha geral do tipo: vale para todo item que não tenha linha própria. No máximo uma linha geral por tipo (400 se vier mais de uma). A linha específica substitui a geral para aquele item; específica com 0 e 0% = sem repasse naquele item. Tipo sem nenhuma linha = sem repasse. | |
vinculoRepasse.tipoVinculo | string | ||
vinculoRepasse.produtos | array<object> | ||
vinculoRepasse.produtos[].valorPercentual | number | ✅ | |
vinculoRepasse.produtos[].valorMonetario | number | ✅ | |
vinculoRepasse.produtos[].tipoCalculo | string | ✅ | |
vinculoRepasse.produtos[].tipoProduto | integer | ||
vinculoRepasse.produtos[].material | integer | ||
vinculoRepasse.produtos[].produto | integer | Produto da linha; vazio = todos os produtos (linha geral). — aceita null | |
vinculoRepasse.servicos | array<object> | ||
vinculoRepasse.servicos[].valorPercentual | number | ✅ | |
vinculoRepasse.servicos[].valorMonetario | number | ✅ | |
vinculoRepasse.servicos[].tipoCalculo | string | ✅ | |
vinculoRepasse.servicos[].servico | integer | Serviço da linha; vazio = todos os serviços (linha geral). — aceita null | |
vinculoRepasse.taxas | array<object> | ||
vinculoRepasse.taxas[].valorPercentual | number | ✅ | |
vinculoRepasse.taxas[].valorMonetario | number | ✅ | |
vinculoRepasse.taxas[].tipoCalculo | string | ✅ | |
vinculoRepasse.taxas[].taxa | integer | Taxa da linha; vazio = todas as taxas (linha geral). — aceita null |
Respostas
202— Corpo de sucesso é o número cru201, não o objeto Colaborador.401— Token ausente, inválido, revogado ou expirado403— A chave não tem a permissão exigida pela rota (devolvida emescopoFaltante)503— Não foi possível validar a chave no momento — falha de rede/indisponibilidade, não problema com a chave em si
DELETE /colaboradores/{id}
Desativar colaborador · Permissão: colaborador:delete
É uma desativação (ativo = false), não uma exclusão física. Desativa também as grades, especialidades e vínculos de empresa do colaborador. Avisa (mas não bloqueia) se houver agendamento futuro.
Parâmetros
| Nome | Onde | Obrig. | Tipo | Descrição / restrições |
|---|---|---|---|---|
id | caminho | ✅ sim | integer | ID do colaborador — mín. 1 |
Respostas
200— Segue o padrão canônico (igual convênio).401— Token ausente, inválido, revogado ou expirado403— A chave não tem a permissão exigida pela rota (devolvida emescopoFaltante)404— Colaborador não encontrado503— Não foi possível validar a chave no momento — falha de rede/indisponibilidade, não problema com a chave em si
POST /colaboradores/{id}/usuario
Criar login (Keycloak) para o colaborador · Permissão: colaborador:update
Cria um acesso de login de verdade ao sistema para este colaborador (email + senha) — diferente do POST /colaboradores/PUT /colaboradores/{id}, que só cadastram dados e nunca criam acesso. Falha se o colaborador já tiver login.
Parâmetros
| Nome | Onde | Obrig. | Tipo | Descrição / restrições |
|---|---|---|---|---|
id | caminho | ✅ sim | integer | ID do colaborador — mín. 1 |
Corpo (application/json) — obrigatório
Campos obrigatórios: email, senha
| Campo | Tipo | Obrig. | Descrição / restrições |
|---|---|---|---|
email | string (email) | ✅ | |
senha | string | ✅ | mín. caracteres 8 |
primeiroNome | string | Sem informar, usa a primeira palavra do nome cadastrado. — aceita null | |
sobrenome | string | Sem informar, usa o restante do nome cadastrado. — aceita null |
Respostas
201— Login criado400— Email ausente, ou senha com menos de 8 caracteres401— Token ausente, inválido, revogado ou expirado403— A chave não tem a permissão exigida pela rota (devolvida emescopoFaltante)404— Colaborador não encontrado409— Este colaborador já tem login503— Não foi possível validar a chave no momento — falha de rede/indisponibilidade, não problema com a chave em si
Grade de Colaborador 7 operações
Grade de horários/agenda do colaborador.
GET /grades-colaborador
Listar grade de colaborador · Permissão: gradeColaborador:read
Paginado de verdade — use page/pageSize e os filtros abaixo para não trazer a grade inteira da clínica.
Parâmetros
| Nome | Onde | Obrig. | Tipo | Descrição / restrições |
|---|---|---|---|---|
page | query | não | integer | padrão 1; mín. 1 |
pageSize | query | não | integer | padrão 50; mín. 1; máx. 200 |
colaboradorId | query | não | integer | |
localId | query | não | integer | |
vigenteEm | query | não | string (date) | Só grades vigentes nessa data (entre vigenteDesde e vigenteAte, ou sem vigenteAte). |
Respostas
200— Lista paginada401— Token ausente, inválido, revogado ou expirado403— A chave não tem a permissão exigida pela rota (devolvida emescopoFaltante)503— Não foi possível validar a chave no momento — falha de rede/indisponibilidade, não problema com a chave em si
POST /grades-colaborador
Cadastrar horário(s) de grade · Permissão: gradeColaborador:create
Já checa conflito de horário — retorna erro se o novo horário colidir com um existente.
Corpo (application/json) — obrigatório
Campos obrigatórios: colaboradorGrade, colaboradorGrade[].colaboradorId, colaboradorGrade[].inicioAtendimento, colaboradorGrade[].fimAtendimento, colaboradorGrade[].tempoAtendimento, colaboradorGrade[].repetir, colaboradorGrade[].diasDaSemana
Todos os campos do corpo (22)
| Campo | Tipo | Obrig. | Descrição / restrições |
|---|---|---|---|
colaboradorGrade | array<object> | ✅ | Um ou mais horários — o corpo já aceita lista, então cria vários de uma vez. |
colaboradorGrade[].localId | integer | aceita null | |
colaboradorGrade[].colaboradorId | integer | ✅ | |
colaboradorGrade[].inicioAtendimento | string (date-time) | ✅ | |
colaboradorGrade[].fimAtendimento | string (date-time) | ✅ | |
colaboradorGrade[].tempoAtendimento | integer | ✅ | Duração de cada horário, em minutos |
colaboradorGrade[].repetir | string | ✅ | Ex.: NAO_REPETIR, SEMANALMENTE |
colaboradorGrade[].diasDaSemana | string | ✅ | Dias em que a grade se repete |
colaboradorGrade[].vigenteDesde | string (date) | aceita null | |
colaboradorGrade[].vigenteAte | string (date) | aceita null | |
colaboradorGrade[].maximoEncaixePorDia | integer | ||
colaboradorGrade[].maximoEncaixePorHorario | integer | ||
colaboradorGrade[].minimoTempoEntreEncaixes | integer | ||
colaboradorGrade[].convenio | array<object> | Convênios atendidos nesta grade | |
colaboradorGrade[].convenio[].id | integer | ||
colaboradorGrade[].convenio[].limite | integer | aceita null | |
colaboradorGrade[].equipamento | array<integer> | ||
colaboradorGrade[].especialidades | array<object> | ||
colaboradorGrade[].especialidades[].id | integer | ||
colaboradorGrade[].servicos | array<object> | ||
colaboradorGrade[].servicos[].id | integer | ||
colaboradorGrade[].agendamentoOnline | boolean | aceita null |
Respostas
201— Grade(s) criada(s) — comportamento real, não o esperado: o corpo é um array denull, um por item enviado (ex.:[null, null]para 2 horários). A resposta não devolve os registros criados nem seus ids; se precisar do id, consulte depois porGET /grades-colaborador?colaboradorId=....401— Token ausente, inválido, revogado ou expirado403— A chave não tem a permissão exigida pela rota (devolvida emescopoFaltante)409— Conflito de horário com uma grade já existente422— Falha ao criar grade do colaborador503— Não foi possível validar a chave no momento — falha de rede/indisponibilidade, não problema com a chave em si
GET /grades-colaborador/filter
Filtrar grade de colaborador · Permissão: gradeColaborador:read
Parâmetros
| Nome | Onde | Obrig. | Tipo | Descrição / restrições |
|---|---|---|---|---|
colaboradorId | query | não | integer | |
localId | query | não | integer |
Respostas
200— Lista filtrada401— Token ausente, inválido, revogado ou expirado403— A chave não tem a permissão exigida pela rota (devolvida emescopoFaltante)503— Não foi possível validar a chave no momento — falha de rede/indisponibilidade, não problema com a chave em si
GET /grades-colaborador/{id}
Consultar horário de grade · Permissão: gradeColaborador:read
Parâmetros
| Nome | Onde | Obrig. | Tipo | Descrição / restrições |
|---|---|---|---|---|
id | caminho | ✅ sim | integer | ID da grade — mín. 1 |
Respostas
200— Horário de grade401— Token ausente, inválido, revogado ou expirado403— A chave não tem a permissão exigida pela rota (devolvida emescopoFaltante)404— Grade não encontrada503— Não foi possível validar a chave no momento — falha de rede/indisponibilidade, não problema com a chave em si
PUT /grades-colaborador/{id}
Atualizar horário de grade · Permissão: gradeColaborador:update
O id do path é ignorado — o corpo é um array direto (não um envelope) e cada item precisa ter o próprio id. Erros de negócio (ex.: grade não encontrada) caem no tratamento genérico e viram 500, não 404.
Atualização parcial: campo omitido mantém o valor atual; null limpa; lista omitida mantém; lista enviada substitui ([] apaga).
agendamentoOnlineemodoConvenio(INCLUIR/EXCLUIR) omitidos mantêm — trocar o modo inverte o sentido da lista de convênios.limitesConvenio(limites por convênio no modoEXCLUIR) só muda quando enviado; mandar só a lista de convênios não apaga os limites.
Parâmetros
| Nome | Onde | Obrig. | Tipo | Descrição / restrições |
|---|---|---|---|---|
id | caminho | ✅ sim | integer | ID da grade — mín. 1 |
Corpo (application/json) — obrigatório
Campos obrigatórios: [].colaboradorId, [].inicioAtendimento, [].fimAtendimento, [].tempoAtendimento, [].repetir, [].diasDaSemana, [].id
Todos os campos do corpo (22)
| Campo | Tipo | Obrig. | Descrição / restrições |
|---|---|---|---|
[].localId | integer | aceita null | |
[].colaboradorId | integer | ✅ | |
[].inicioAtendimento | string (date-time) | ✅ | |
[].fimAtendimento | string (date-time) | ✅ | |
[].tempoAtendimento | integer | ✅ | Duração de cada horário, em minutos |
[].repetir | string | ✅ | Ex.: NAO_REPETIR, SEMANALMENTE |
[].diasDaSemana | string | ✅ | Dias em que a grade se repete |
[].vigenteDesde | string (date) | aceita null | |
[].vigenteAte | string (date) | aceita null | |
[].maximoEncaixePorDia | integer | ||
[].maximoEncaixePorHorario | integer | ||
[].minimoTempoEntreEncaixes | integer | ||
[].convenio | array<object> | Convênios atendidos nesta grade | |
[].convenio[].id | integer | ||
[].convenio[].limite | integer | aceita null | |
[].equipamento | array<integer> | ||
[].especialidades | array<object> | ||
[].especialidades[].id | integer | ||
[].servicos | array<object> | ||
[].servicos[].id | integer | ||
[].agendamentoOnline | boolean | aceita null | |
[].id | integer | ✅ |
Respostas
202— Status real é 202, não 200. O corpo de sucesso é o número cru201(não um objeto, não a grade atualizada) — comportamento observado, não documentação de intenção.401— Token ausente, inválido, revogado ou expirado403— A chave não tem a permissão exigida pela rota (devolvida emescopoFaltante)503— Não foi possível validar a chave no momento — falha de rede/indisponibilidade, não problema com a chave em si
DELETE /grades-colaborador/{id}
Excluir este e os próximos horários da série · Permissão: gradeColaborador:delete
Inativação lógica (ativo=false).
Parâmetros
| Nome | Onde | Obrig. | Tipo | Descrição / restrições |
|---|---|---|---|---|
id | caminho | ✅ sim | integer | ID da grade — mín. 1 |
Respostas
200— O corpo de sucesso é o número cru201, não um objeto — mesmo padrão de PUT.401— Token ausente, inválido, revogado ou expirado403— A chave não tem a permissão exigida pela rota (devolvida emescopoFaltante)404— Grade não encontrada503— Não foi possível validar a chave no momento — falha de rede/indisponibilidade, não problema com a chave em si
DELETE /grades-colaborador/unique/{id}
Excluir só este horário (não a série) · Permissão: gradeColaborador:delete
Diferente do DELETE de série: este é uma exclusão física (prisma.colaboradorGrade.delete), não inativação lógica.
Parâmetros
| Nome | Onde | Obrig. | Tipo | Descrição / restrições |
|---|---|---|---|---|
id | caminho | ✅ sim | integer | ID da grade — mín. 1 |
Respostas
200— O corpo de sucesso é o número cru201, não um objeto.401— Token ausente, inválido, revogado ou expirado403— A chave não tem a permissão exigida pela rota (devolvida emescopoFaltante)404— Grade não encontrada — inclusive em erro de integridade referencial (FK), não só "não existe"503— Não foi possível validar a chave no momento — falha de rede/indisponibilidade, não problema com a chave em si
Grade de Equipamento 5 operações
Grade de horários/agenda do equipamento.
GET /grades-equipamento
Listar grade de equipamento · Permissão: gradeEquipamento:read
Paginado de verdade — use page/pageSize e os filtros abaixo para não trazer a grade inteira da clínica.
Parâmetros
| Nome | Onde | Obrig. | Tipo | Descrição / restrições |
|---|---|---|---|---|
page | query | não | integer | padrão 1; mín. 1 |
pageSize | query | não | integer | padrão 50; mín. 1; máx. 200 |
equipamentoId | query | não | integer | |
localId | query | não | integer | |
vigenteEm | query | não | string (date) | Só grades vigentes nessa data (entre vigenteDesde e vigenteAte, ou sem vigenteAte). |
Respostas
200— Lista paginada401— Token ausente, inválido, revogado ou expirado403— A chave não tem a permissão exigida pela rota (devolvida emescopoFaltante)503— Não foi possível validar a chave no momento — falha de rede/indisponibilidade, não problema com a chave em si
POST /grades-equipamento
Cadastrar horário(s) de grade · Permissão: gradeEquipamento:create
O corpo é a lista direto (sem envelope). Já checa conflito de horário. Bug conhecido: essa rota (e o PUT/DELETE de /grades-equipamento/{id}) chama redis.deleteByPattern(...) sem checar se redis existe — como a autenticação por chave de API nunca popula isso, a chamada quebra depois que a escrita no banco já foi commitada. Na prática, hoje, criar/atualizar/excluir grade de equipamento por API key grava certo mas devolve 500 em vez do sucesso esperado. Reportado ao time; use com cautela até ser corrigido.
Corpo (application/json) — obrigatório
Campos obrigatórios: [].localId, [].equipamentoId, [].diaDaSemana, [].inicioAtendimento, [].fimAtendimento, [].gradeEmMinutos
| Campo | Tipo | Obrig. | Descrição / restrições |
|---|---|---|---|
[].localId | integer | ✅ | |
[].equipamentoId | integer | ✅ | |
[].repetir | boolean | padrão True | |
[].diaDaSemana | string | ✅ | |
[].inicioAtendimento | string (date-time) | ✅ | |
[].fimAtendimento | string (date-time) | ✅ | |
[].gradeEmMinutos | integer | ✅ | |
[].vigenteDesde | string (date) | aceita null |
Respostas
201— Sujeito ao bug deredisacima. Quando não bate no bug, o corpo de sucesso é o número cru201, não um objeto.401— Token ausente, inválido, revogado ou expirado403— A chave não tem a permissão exigida pela rota (devolvida emescopoFaltante)422— Falha ao criar grade de equipamento (conflito de horário, entre outros)500— Bug conhecido deredisundefined — ver descrição acima. A escrita pode ter sido efetivada mesmo com esse erro.503— Não foi possível validar a chave no momento — falha de rede/indisponibilidade, não problema com a chave em si
GET /grades-equipamento/{id}
Consultar horário de grade · Permissão: gradeEquipamento:read
Parâmetros
| Nome | Onde | Obrig. | Tipo | Descrição / restrições |
|---|---|---|---|---|
id | caminho | ✅ sim | integer | ID da grade — mín. 1 |
Respostas
200— Horário de grade401— Token ausente, inválido, revogado ou expirado403— A chave não tem a permissão exigida pela rota (devolvida emescopoFaltante)404— Grade não encontrada503— Não foi possível validar a chave no momento — falha de rede/indisponibilidade, não problema com a chave em si
PUT /grades-equipamento/{id}
Atualizar horário de grade · Permissão: gradeEquipamento:update
Mesmo bug de redis undefined do POST — ver descrição de POST /grades-equipamento.
Atualização parcial: campo omitido mantém o valor atual; null limpa; lista omitida mantém; lista enviada substitui ([] apaga).
- Listas
profissionais(aceita tambémcolaboradores, nome usado na leitura),convenioseservicos: omitidas mantêm, enviadas substituem. exibirNoAgendamentoomitido mantém.
Parâmetros
| Nome | Onde | Obrig. | Tipo | Descrição / restrições |
|---|---|---|---|---|
id | caminho | ✅ sim | integer | ID da grade — mín. 1 |
Corpo (application/json) — obrigatório
Campos obrigatórios: localId, equipamentoId, diaDaSemana, inicioAtendimento, fimAtendimento, gradeEmMinutos
| Campo | Tipo | Obrig. | Descrição / restrições |
|---|---|---|---|
localId | integer | ✅ | |
equipamentoId | integer | ✅ | |
repetir | boolean | padrão True | |
diaDaSemana | string | ✅ | |
inicioAtendimento | string (date-time) | ✅ | |
fimAtendimento | string (date-time) | ✅ | |
gradeEmMinutos | integer | ✅ | |
vigenteDesde | string (date) | aceita null |
Respostas
202— Status real 202, não 200. Sujeito ao bug deredis(500). Corpo de sucesso, quando não bate no bug: número cru201.401— Token ausente, inválido, revogado ou expirado403— A chave não tem a permissão exigida pela rota (devolvida emescopoFaltante)404— Grade não encontrada500— Bug conhecido deredisundefined — ver descrição de POST /grades-equipamento.503— Não foi possível validar a chave no momento — falha de rede/indisponibilidade, não problema com a chave em si
DELETE /grades-equipamento/{id}
Excluir horário de grade · Permissão: gradeEquipamento:delete
Inativação lógica (ativo=false). Mesmo bug de redis undefined do POST.
Parâmetros
| Nome | Onde | Obrig. | Tipo | Descrição / restrições |
|---|---|---|---|---|
id | caminho | ✅ sim | integer | ID da grade — mín. 1 |
Respostas
200— Sujeito ao bug deredis(500). Corpo de sucesso, quando não bate no bug: número cru201.401— Token ausente, inválido, revogado ou expirado403— A chave não tem a permissão exigida pela rota (devolvida emescopoFaltante)404— Grade não encontrada500— Bug conhecido deredisundefined — ver descrição de POST /grades-equipamento.503— Não foi possível validar a chave no momento — falha de rede/indisponibilidade, não problema com a chave em si
Convênios 22 operações
Cadastro de convênios da clínica.
Em duas fases: dados do convênio (POST /convenios) e depois as abas por PUT /convenios/{id}/…. Confira o resultado em GET /convenios/{id}/farol/itens.
GET /convenios
Listar convênios · Permissão: convenio:read
Parâmetros
| Nome | Onde | Obrig. | Tipo | Descrição / restrições |
|---|---|---|---|---|
page | query | não | integer | padrão 1; mín. 1 |
pageSize | query | não | integer | padrão 50; mín. 1; máx. 200 |
ativo | query | não | boolean | Sem informar, lista ativos e inativos. |
Respostas
200— Lista paginada401— Token ausente, inválido, revogado ou expirado403— A chave não tem a permissão exigida pela rota (devolvida emescopoFaltante)503— Não foi possível validar a chave no momento — falha de rede/indisponibilidade, não problema com a chave em si
POST /convenios
Cadastrar convênio · Permissão: convenio:create
Corpo (application/json) — obrigatório
Campos obrigatórios: descricao, dataInicio, empresaId, unidadesIds
Se enviar politicasPorTipoProduto, exige: politicasPorTipoProduto[].tipoProdutoId, politicasPorTipoProduto[].fatorK, politicasPorTipoProduto[].idJson
Todos os campos do corpo (36)
| Campo | Tipo | Obrig. | Descrição / restrições |
|---|---|---|---|
nomeFantasia | string | ||
razaoSocial | string | ||
cnpj | string | Único por clínica | |
descricao | string | ✅ | |
codigo | integer | ||
telefone | string | ||
email | string | ||
pessoaDeContato | string | ||
observacao | string | ||
dataInicio | string (date-time) | ✅ | |
dataFim | string (date-time) | aceita null | |
dataReajuste | string (date-time) | aceita null | |
dataRenovacao | string (date-time) | aceita null | |
prazoRecursoGlosa | integer | ||
prazoPagamentoRecursoGlosa | integer | ||
prazoReajuste | integer | ||
prazoAutorizacao | integer | ||
prazoPagamento | integer | ||
prazoRetorno | integer | ||
prazoLimiteEntregaGuias | integer | ||
limiteParcelasConvenioParticular | integer | ||
fatorK | number | ||
faturadoPagamento | boolean | ||
exigirToken | boolean | ||
operadoraId | string | ID da operadora | |
empresaId | string | ✅ | ID da empresa dona do convênio ("Empresa Principal" na tela do sistema). |
unidadesIds | array<integer> | ✅ | IDs das filiais/unidades ("Unidades" na tela do sistema) em que esse convênio é aceito na agenda. Pode incluir o mesmo ID de empresaId. |
kitDocumentosPadrao | object | ||
kitDocumentosPadrao.id | integer | ||
xmlConsultaId | integer | ||
xmlSpSadtId | integer | ||
politicasPorTipoProduto | array<object> | ||
politicasPorTipoProduto[].tipoProdutoId | integer | ✅ | |
politicasPorTipoProduto[].fatorK | string | ✅ | Percentual. Aceita vírgula ou ponto. |
politicasPorTipoProduto[].idJson | string | ✅ | JSON serializado com fontePrecoId e tipoPrecificacao |
registroANS | string | Registro ANS do convênio. Na criação, é este campo que é gravado como código ANS — codigoANS é ignorado. |
Respostas
201— Convênio criado401— Token ausente, inválido, revogado ou expirado403— A chave não tem a permissão exigida pela rota (devolvida emescopoFaltante)409— CNPJ já existe no sistema422— Referência inválida (empresa, operadora ou kit não encontrado)503— Não foi possível validar a chave no momento — falha de rede/indisponibilidade, não problema com a chave em si
POST /convenios/bulk
Cadastrar vários convênios de uma vez · Permissão: convenio:create
Cria até 50 convênios por requisição. Cada convênio é validado e gravado de forma independente: um item com erro não impede os demais, e um convênio nunca fica gravado pela metade (cada um é gravado em uma transação própria).
Validações feitas antes de gravar
- Formato de cada item (campos obrigatórios, tipos, datas, CNPJ com 14 dígitos).
empresaId,unidadesIdseoperadoraIdexistem na clínica.- CNPJ já cadastrado na clínica (com ou sem máscara) ou repetido dentro do próprio lote. Nesse caso, apenas a primeira ocorrência é criada.
Como interpretar a resposta
201: todos os convênios foram criados.207: ao menos um item falhou. Confiraresultados, item a item, peloindice. Os itensCRIADOjá foram gravados.- Para tentar de novo, reenvie apenas os itens com
ERROouNAO_PROCESSADO. Reenviar o lote inteiro é seguro: os já criados serão recusados por CNPJ duplicado.
Limites
- Máximo de 50 convênios por requisição (
400acima disso). - Só um lote por vez por clínica: um segundo lote enquanto o primeiro roda recebe
429. - O processamento é interrompido após 45 segundos. Os itens restantes voltam como
NAO_PROCESSADO.
Corpo (application/json) — obrigatório
Campos obrigatórios: convenios, convenios[].cnpj, convenios[].descricao, convenios[].dataInicio, convenios[].empresaId, convenios[].unidadesIds
Se enviar convenios[].politicasPorTipoProduto, exige: convenios[].politicasPorTipoProduto[].tipoProdutoId, convenios[].politicasPorTipoProduto[].fatorK, convenios[].politicasPorTipoProduto[].idJson
Todos os campos do corpo (37)
| Campo | Tipo | Obrig. | Descrição / restrições |
|---|---|---|---|
convenios | array<object> | ✅ | máx. itens 50; mín. itens 1 |
convenios[].nomeFantasia | string | ||
convenios[].razaoSocial | string | ||
convenios[].cnpj | string | ✅ | Obrigatório no lote. Aceita com ou sem máscara (14 dígitos). É a chave usada para recusar convênios já cadastrados ou repetidos no lote. |
convenios[].descricao | string | ✅ | |
convenios[].codigo | integer | ||
convenios[].telefone | string | ||
convenios[].email | string | ||
convenios[].pessoaDeContato | string | ||
convenios[].observacao | string | ||
convenios[].dataInicio | string (date-time) | ✅ | |
convenios[].dataFim | string (date-time) | aceita null | |
convenios[].dataReajuste | string (date-time) | aceita null | |
convenios[].dataRenovacao | string (date-time) | aceita null | |
convenios[].prazoRecursoGlosa | integer | ||
convenios[].prazoPagamentoRecursoGlosa | integer | ||
convenios[].prazoReajuste | integer | ||
convenios[].prazoAutorizacao | integer | ||
convenios[].prazoPagamento | integer | ||
convenios[].prazoRetorno | integer | ||
convenios[].prazoLimiteEntregaGuias | integer | ||
convenios[].limiteParcelasConvenioParticular | integer | ||
convenios[].fatorK | number | ||
convenios[].faturadoPagamento | boolean | ||
convenios[].exigirToken | boolean | ||
convenios[].operadoraId | string | ID da operadora | |
convenios[].empresaId | string | ✅ | ID da empresa dona do convênio ("Empresa Principal" na tela do sistema). |
convenios[].unidadesIds | array<integer> | ✅ | IDs das filiais/unidades ("Unidades" na tela do sistema) em que esse convênio é aceito na agenda. Pode incluir o mesmo ID de empresaId. |
convenios[].kitDocumentosPadrao | object | ||
convenios[].kitDocumentosPadrao.id | integer | ||
convenios[].xmlConsultaId | integer | ||
convenios[].xmlSpSadtId | integer | ||
convenios[].politicasPorTipoProduto | array<object> | ||
convenios[].politicasPorTipoProduto[].tipoProdutoId | integer | ✅ | |
convenios[].politicasPorTipoProduto[].fatorK | string | ✅ | Percentual. Aceita vírgula ou ponto. |
convenios[].politicasPorTipoProduto[].idJson | string | ✅ | JSON serializado com fontePrecoId e tipoPrecificacao |
convenios[].registroANS | string | Registro ANS do convênio. Na criação, é este campo que é gravado como código ANS — codigoANS é ignorado. |
Respostas
201— Todos os convênios foram criados207— Lote processado com falhas parciais. Vejaresultados.400— Lote vazio, sem a chaveconveniosou acima de 50 itens401— Token ausente, inválido, revogado ou expirado403— A chave não tem a permissão exigida pela rota (devolvida emescopoFaltante)429— Já existe um lote em andamento para esta clínica503— Não foi possível validar a chave no momento — falha de rede/indisponibilidade, não problema com a chave em si
GET /convenios/{id}/colaboradores
Listar colaboradores do convênio · Permissão: convenio:read
Parâmetros
| Nome | Onde | Obrig. | Tipo | Descrição / restrições |
|---|---|---|---|---|
id | caminho | ✅ sim | integer | ID do convênio — mín. 1 |
page | query | não | integer | padrão 1; mín. 1 |
pageSize | query | não | integer | padrão 50; mín. 1; máx. 200 |
Respostas
200— Lista paginada400—idinválido401— Token ausente, inválido, revogado ou expirado403— A chave não tem a permissão exigida pela rota (devolvida emescopoFaltante)404— Convênio não encontrado503— Não foi possível validar a chave no momento — falha de rede/indisponibilidade, não problema com a chave em si
PUT /convenios/{id}/colaboradores
Definir colaboradores do convênio (em lote) · Permissão: convenio:update
Equivale à aba Colaboradores do cadastro de convênio: para cada colaborador define se é credenciado, se atende o convênio, a conversão e as especialidades (próprias e convertidas). Aceita até 100 colaboradores por requisição, todos do mesmo convênio.
Comportamento (upsert)
- Se o colaborador ainda não tem vínculo com o convênio, ele é criado. Se já tem, é atualizado — a linha nunca é duplicada.
- Campos omitidos mantêm o valor atual. Diferente do
PUT /convenios/{id}, aqui não há sobrescrita por omissão. - As listas de especialidades são aditivas: só acrescentam. Esta rota nunca remove especialidade nem conversão. Para remover, use a tela.
- É idempotente: reenviar a mesma requisição não gera duplicidade.
Regras (as mesmas da tela)
atendesó pode sertruese o colaborador for credenciado ou tiver conversão.especialidadesIdsdevem ser especialidades ativas do próprio colaborador.especialidadesConvertidasIdsdevem ser especialidades do colaborador convertido.- O colaborador não pode ser convertido para ele mesmo, nem ter uma conversão existente trocada por outra.
colaboradorIdnão pode se repetir na mesma requisição.
Como interpretar a resposta
200: todos os colaboradores foram processados.207: ao menos um falhou. Confiraresultadospeloindice. Os itensCRIADOeATUALIZADOjá foram gravados, e cada colaborador é gravado em transação própria (nunca fica pela metade).- Para tentar de novo, reenvie apenas os itens com
ERROouNAO_PROCESSADO. Reenviar tudo também é seguro.
Limites
- Máximo de 100 colaboradores por requisição (
400acima disso). - Só uma atualização por vez por convênio: uma segunda, enquanto a primeira roda, recebe
429. - O processamento é interrompido após 45 segundos e o restante volta como
NAO_PROCESSADO.
Parâmetros
| Nome | Onde | Obrig. | Tipo | Descrição / restrições |
|---|---|---|---|---|
id | caminho | ✅ sim | integer | ID do convênio — mín. 1 |
Corpo (application/json) — obrigatório
Campos obrigatórios: colaboradores, colaboradores[].colaboradorId
| Campo | Tipo | Obrig. | Descrição / restrições |
|---|---|---|---|
colaboradores | array<object> | ✅ | máx. itens 100; mín. itens 1 |
colaboradores[].colaboradorId | integer | ✅ | ID do colaborador |
colaboradores[].credenciado | boolean | Coluna Credenciado da tela. Omitido: mantém o valor atual (ou false se o vínculo for novo). | |
colaboradores[].atende | boolean | Coluna Atende da tela. Só pode ser true se o colaborador for credenciado ou tiver conversão. Omitido: mantém o valor atual. | |
colaboradores[].colaboradorConvertidoId | integer | Coluna Conversão da tela: colaborador que atende no lugar deste para o convênio. | |
colaboradores[].especialidadesIds | array<integer> | Coluna Especialidade da tela: IDs de especialidades cadastradas neste colaborador (colaborador_especialidade, ativas). — máx. itens 50 | |
colaboradores[].especialidadesConvertidasIds | array<integer> | Coluna Especialidade Conversão da tela: IDs de especialidades do colaborador convertido. Exige colaboradorConvertidoId (enviado agora ou já existente). — máx. itens 50 |
Respostas
200— Todos os colaboradores foram processados207— Processado com falhas parciais. Vejaresultados.400—idinválido, lista vazia, sem a chavecolaboradoresou acima de 100 itens401— Token ausente, inválido, revogado ou expirado403— A chave não tem a permissão exigida pela rota (devolvida emescopoFaltante)404— Convênio não encontrado429— Já existe uma atualização em andamento para este convênio503— Não foi possível validar a chave no momento — falha de rede/indisponibilidade, não problema com a chave em si
GET /convenios/{id}/taxas
Listar taxas do convênio · Permissão: convenio:read
Parâmetros
| Nome | Onde | Obrig. | Tipo | Descrição / restrições |
|---|---|---|---|---|
id | caminho | ✅ sim | integer | ID do convênio — mín. 1 |
page | query | não | integer | padrão 1; mín. 1 |
pageSize | query | não | integer | padrão 50; mín. 1; máx. 200 |
Respostas
200— Lista paginada400—idinválido401— Token ausente, inválido, revogado ou expirado403— A chave não tem a permissão exigida pela rota (devolvida emescopoFaltante)404— Convênio não encontrado503— Não foi possível validar a chave no momento — falha de rede/indisponibilidade, não problema com a chave em si
PUT /convenios/{id}/taxas
Definir taxas do convênio (em lote) · Permissão: convenio:update
Equivale à aba Taxas do cadastro de convênio. Aceita até 200 taxas por requisição, todas do mesmo convênio.
Comportamento (upsert)
- A chave é
taxaId: se o convênio ainda não usa essa taxa, o vínculo é criado; se já usa, é atualizado. - Campos omitidos mantêm o valor atual, exceto
valorConvertido: omitido mantém, masnullexplicitamente limpa o valor. - É idempotente: reenviar o mesmo item não duplica.
Como interpretar a resposta
200: todas as taxas foram processadas.207: ao menos uma falhou. Confiraresultadospeloindice.
Limites
- Máximo de 200 taxas por requisição (
400acima disso). - Só uma atualização por vez por convênio: uma segunda, enquanto a primeira roda, recebe
429. - Interrompida após 45 segundos; o restante volta como
NAO_PROCESSADO.
Parâmetros
| Nome | Onde | Obrig. | Tipo | Descrição / restrições |
|---|---|---|---|---|
id | caminho | ✅ sim | integer | ID do convênio — mín. 1 |
Corpo (application/json) — obrigatório
Campos obrigatórios: taxas, taxas[].taxaId
Todos os campos do corpo (13)
| Campo | Tipo | Obrig. | Descrição / restrições |
|---|---|---|---|
taxas | array<object> | ✅ | máx. itens 200; mín. itens 1 |
taxas[].taxaId | integer | ✅ | ID da taxa cadastrada no sistema (coluna Taxa da tela) |
taxas[].utiliza | boolean | Coluna Utiliza. Omitido: mantém o valor atual (ou false se o vínculo for novo). | |
taxas[].zerarValor | boolean | Coluna Zerar Valor. Omitido: mantém o valor atual. | |
taxas[].nomeConvertido | string | ||
taxas[].descricaoConvertida | string | ||
taxas[].valorConvertido | number | Em reais (ex.: 50 = R$ 50,00). null limpa o valor convertido. Omitido: mantém o valor atual. — aceita null | |
taxas[].tipoCodigoId | integer | ||
taxas[].tipoTaxaId | integer | ||
taxas[].tabela87ANSId | integer | ||
taxas[].codigo | string | ||
taxas[].codigoTabelaConversao | string | ||
taxas[].descricaoConversaoTabela | string |
Respostas
200— Todas as taxas foram processadas207— Processado com falhas parciais. Vejaresultados.400—idinválido, lista vazia, sem a chavetaxasou acima de 200 itens401— Token ausente, inválido, revogado ou expirado403— A chave não tem a permissão exigida pela rota (devolvida emescopoFaltante)404— Convênio não encontrado429— Já existe uma atualização em andamento para este convênio503— Não foi possível validar a chave no momento — falha de rede/indisponibilidade, não problema com a chave em si
GET /convenios/{id}/servicos
Listar serviços do convênio · Permissão: convenio:read
Parâmetros
| Nome | Onde | Obrig. | Tipo | Descrição / restrições |
|---|---|---|---|---|
id | caminho | ✅ sim | integer | ID do convênio — mín. 1 |
page | query | não | integer | padrão 1; mín. 1 |
pageSize | query | não | integer | padrão 50; mín. 1; máx. 200 |
Respostas
200— Lista paginada400—idinválido401— Token ausente, inválido, revogado ou expirado403— A chave não tem a permissão exigida pela rota (devolvida emescopoFaltante)404— Convênio não encontrado503— Não foi possível validar a chave no momento — falha de rede/indisponibilidade, não problema com a chave em si
PUT /convenios/{id}/servicos
Definir serviços do convênio (em lote) · Permissão: convenio:update
✅ regra vigente: servicos[].valorInternoConvenio sozinho não fecha pacote — para preço fechado envie servicos[].pacote: true e zerarValor: true em cada item incluso (abas produtos/taxas/servicos); sem pacote, os itens somam por cima e o zerarValor deles nem é lido. null em valorInternoConvenio limpa; omitido mantém. ✅ Desde 24/09, na API do sistema (usada pela tela), o item do serviço traz somarItens e efetivo.totalConvenio (= linha Σ). Na API externa (Swagger de 26/09), somarItens aparece no cadastro do serviço, mas efetivo.totalConvenio não — para conferir o total pela API externa, use GET /convenios/{id}/farol/itens.
Equivale à aba Serviços do cadastro de convênio. Aceita até 200 serviços por requisição, todos do mesmo convênio.
Comportamento (upsert)
- A chave é
servicoId: cria o vínculo se ainda não existir, atualiza se já existir. - Campos omitidos mantêm o valor atual, exceto
valorInternoConvenio: omitido mantém,nulllimpa. - Idempotente: reenviar o mesmo item não duplica.
Como interpretar a resposta
200: todos os serviços foram processados.207: ao menos um falhou. Confiraresultadospeloindice.
Limites
- Máximo de 200 serviços por requisição (
400acima disso). - Só uma atualização por vez por convênio: uma segunda, enquanto a primeira roda, recebe
429. - Interrompida após 45 segundos; o restante volta como
NAO_PROCESSADO.
Parâmetros
| Nome | Onde | Obrig. | Tipo | Descrição / restrições |
|---|---|---|---|---|
id | caminho | ✅ sim | integer | ID do convênio — mín. 1 |
Corpo (application/json) — obrigatório
Campos obrigatórios: servicos, servicos[].servicoId
Todos os campos do corpo (19)
| Campo | Tipo | Obrig. | Descrição / restrições |
|---|---|---|---|
servicos | array<object> | ✅ | máx. itens 200; mín. itens 1 |
servicos[].servicoId | integer | ✅ | ID do serviço cadastrado no sistema (coluna Serviço da tela) |
servicos[].utiliza | boolean | Coluna Utiliza. Omitido: mantém o valor atual (ou false se o vínculo for novo). | |
servicos[].zerarValor | boolean | ||
servicos[].pacote | boolean | ||
servicos[].autorizacaoPrevia | boolean | ||
servicos[].retornoServico | boolean | ||
servicos[].ativo | boolean | ||
servicos[].nomeConversao | string | ||
servicos[].descricaoConvenio | string | ||
servicos[].valorInternoConvenio | number | Em reais. null limpa o valor. Omitido: mantém o valor atual. — aceita null | |
servicos[].parcelasMaximas | integer | ||
servicos[].tipoCodigoId | integer | ||
servicos[].tipoAtendimentoId | integer | aceita null | |
servicos[].tabela87ANSId | integer | ||
servicos[].kitDocumentoId | integer | ||
servicos[].codigo | string | ||
servicos[].codigoTuss | string | ||
servicos[].codigoConvenio | string |
Respostas
200— Todos os serviços foram processados207— Processado com falhas parciais. Vejaresultados.400—idinválido, lista vazia, sem a chaveservicosou acima de 200 itens401— Token ausente, inválido, revogado ou expirado403— A chave não tem a permissão exigida pela rota (devolvida emescopoFaltante)404— Convênio não encontrado429— Já existe uma atualização em andamento para este convênio503— Não foi possível validar a chave no momento — falha de rede/indisponibilidade, não problema com a chave em si
GET /convenios/{id}/produtos
Listar produtos do convênio · Permissão: convenio:read
Parâmetros
| Nome | Onde | Obrig. | Tipo | Descrição / restrições |
|---|---|---|---|---|
id | caminho | ✅ sim | integer | ID do convênio — mín. 1 |
page | query | não | integer | padrão 1; mín. 1 |
pageSize | query | não | integer | padrão 50; mín. 1; máx. 200 |
Respostas
200— Lista paginada400—idinválido401— Token ausente, inválido, revogado ou expirado403— A chave não tem a permissão exigida pela rota (devolvida emescopoFaltante)404— Convênio não encontrado503— Não foi possível validar a chave no momento — falha de rede/indisponibilidade, não problema com a chave em si
PUT /convenios/{id}/produtos
Definir produtos do convênio (em lote) · Permissão: convenio:update
Equivale à aba Produtos do cadastro de convênio. Aceita até 200 produtos por requisição, todos do mesmo convênio.
Comportamento (upsert)
- A chave é
produtoId: cria o vínculo se ainda não existir, atualiza se já existir. - Campos omitidos mantêm o valor atual, exceto
valorUnitarioConversaoefatorK: omitido mantém,nulllimpa. - Idempotente: reenviar o mesmo item não duplica.
Como interpretar a resposta
200: todos os produtos foram processados.207: ao menos um falhou. Confiraresultadospeloindice.
Limites
- Máximo de 200 produtos por requisição (
400acima disso). - Só uma atualização por vez por convênio: uma segunda, enquanto a primeira roda, recebe
429. - Interrompida após 45 segundos; o restante volta como
NAO_PROCESSADO.
Parâmetros
| Nome | Onde | Obrig. | Tipo | Descrição / restrições |
|---|---|---|---|---|
id | caminho | ✅ sim | integer | ID do convênio — mín. 1 |
Corpo (application/json) — obrigatório
Campos obrigatórios: produtos, produtos[].produtoId
Todos os campos do corpo (17)
| Campo | Tipo | Obrig. | Descrição / restrições |
|---|---|---|---|
produtos | array<object> | ✅ | máx. itens 200; mín. itens 1 |
produtos[].produtoId | integer | ✅ | ID do produto cadastrado no sistema (coluna Produto da tela) |
produtos[].utiliza | boolean | Coluna Utiliza. Omitido: mantém o valor atual (ou false se o vínculo for novo). | |
produtos[].zerarValor | boolean | Coluna Zerar Valor. | |
produtos[].nomeConversao | string | ||
produtos[].descricaoConversao | string | ||
produtos[].valorUnitarioConversao | number | Valor unitário em reais. null limpa o valor. Omitido: mantém o valor atual. — aceita null | |
produtos[].fatorK | string | Percentual do fatorK/inflator/deflator. Aceita vírgula ou ponto. null limpa. — aceita null | |
produtos[].parcelasMaximas | integer | ||
produtos[].tipoCodigoId | integer | aceita null | |
produtos[].tabela87ANSId | integer | aceita null | |
produtos[].fontePrecoCompraOptionsId | integer | Fonte de preço de compra usada na política de preço. | |
produtos[].tipoPrecificacao | string | valores: PRECO_1, PRECO_2, PRECO_3 | |
produtos[].codigo | string | ||
produtos[].codigoTuss | string | ||
produtos[].codigoTiss | string | ||
produtos[].codigoConversao | string |
Respostas
200— Todos os produtos foram processados207— Processado com falhas parciais. Vejaresultados.400—idinválido, lista vazia, sem a chaveprodutosou acima de 200 itens401— Token ausente, inválido, revogado ou expirado403— A chave não tem a permissão exigida pela rota (devolvida emescopoFaltante)404— Convênio não encontrado429— Já existe uma atualização em andamento para este convênio503— Não foi possível validar a chave no momento — falha de rede/indisponibilidade, não problema com a chave em si
GET /convenios/{id}/especialidades
Listar especialidades do convênio · Permissão: convenio:read
Parâmetros
| Nome | Onde | Obrig. | Tipo | Descrição / restrições |
|---|---|---|---|---|
id | caminho | ✅ sim | integer | ID do convênio — mín. 1 |
page | query | não | integer | padrão 1; mín. 1 |
pageSize | query | não | integer | padrão 50; mín. 1; máx. 200 |
Respostas
200— Lista paginada400—idinválido401— Token ausente, inválido, revogado ou expirado403— A chave não tem a permissão exigida pela rota (devolvida emescopoFaltante)404— Convênio não encontrado503— Não foi possível validar a chave no momento — falha de rede/indisponibilidade, não problema com a chave em si
PUT /convenios/{id}/especialidades
Definir especialidades do convênio (em lote) · Permissão: convenio:update
Equivale à aba Especialidades do cadastro de convênio. Aceita até 200 especialidades por requisição, todas do mesmo convênio.
Comportamento (upsert)
- A chave é
especialidadeId: cria o vínculo se ainda não existir, atualiza se já existir. A tabela não tem restrição única no banco (é o mesmo comportamento da tela interna); esta rota resolve isso do lado da aplicação, usando sempre a linha mais antiga quando há mais de uma. - Campos omitidos mantêm o valor atual.
- Idempotente: reenviar o mesmo item não duplica.
Como interpretar a resposta
200: todas as especialidades foram processadas.207: ao menos uma falhou. Confiraresultadospeloindice.
Limites
- Máximo de 200 especialidades por requisição (
400acima disso). - Só uma atualização por vez por convênio: uma segunda, enquanto a primeira roda, recebe
429. - Interrompida após 45 segundos; o restante volta como
NAO_PROCESSADO.
Parâmetros
| Nome | Onde | Obrig. | Tipo | Descrição / restrições |
|---|---|---|---|---|
id | caminho | ✅ sim | integer | ID do convênio — mín. 1 |
Corpo (application/json) — obrigatório
Campos obrigatórios: especialidades, especialidades[].especialidadeId
| Campo | Tipo | Obrig. | Descrição / restrições |
|---|---|---|---|
especialidades | array<object> | ✅ | máx. itens 200; mín. itens 1 |
especialidades[].especialidadeId | integer | ✅ | ID da especialidade cadastrada no sistema (coluna Especialidade da tela) |
especialidades[].utiliza | boolean | Coluna Atende. Omitido: mantém o valor atual (ou false se o vínculo for novo). | |
especialidades[].dataInicio | string (date-time) | aceita null | |
especialidades[].dataFim | string (date-time) | aceita null |
Respostas
200— Todas as especialidades foram processadas207— Processado com falhas parciais. Vejaresultados.400—idinválido, lista vazia, sem a chaveespecialidadesou acima de 200 itens401— Token ausente, inválido, revogado ou expirado403— A chave não tem a permissão exigida pela rota (devolvida emescopoFaltante)404— Convênio não encontrado429— Já existe uma atualização em andamento para este convênio503— Não foi possível validar a chave no momento — falha de rede/indisponibilidade, não problema com a chave em si
GET /convenios/{id}/planos
Listar planos do convênio · Permissão: convenio:read
Parâmetros
| Nome | Onde | Obrig. | Tipo | Descrição / restrições |
|---|---|---|---|---|
id | caminho | ✅ sim | integer | ID do convênio — mín. 1 |
page | query | não | integer | padrão 1; mín. 1 |
pageSize | query | não | integer | padrão 50; mín. 1; máx. 200 |
Respostas
200— Lista paginada400—idinválido401— Token ausente, inválido, revogado ou expirado403— A chave não tem a permissão exigida pela rota (devolvida emescopoFaltante)404— Convênio não encontrado503— Não foi possível validar a chave no momento — falha de rede/indisponibilidade, não problema com a chave em si
PUT /convenios/{id}/planos
Definir planos do convênio (em lote) · Permissão: convenio:update
Equivale à aba Planos do cadastro de convênio. Aceita até 200 planos por requisição, todos do mesmo convênio.
Comportamento (upsert)
- A chave é
planoId: cria o vínculo se ainda não existir, atualiza se já existir. A tabela não tem restrição única no banco (mesmo comportamento da tela interna); esta rota resolve isso do lado da aplicação, usando sempre a linha mais antiga quando há mais de uma. - Idempotente: reenviar o mesmo item não duplica.
Como interpretar a resposta
200: todos os planos foram processados.207: ao menos um falhou. Confiraresultadospeloindice.
Limites
- Máximo de 200 planos por requisição (
400acima disso). - Só uma atualização por vez por convênio: uma segunda, enquanto a primeira roda, recebe
429. - Interrompida após 45 segundos; o restante volta como
NAO_PROCESSADO.
Parâmetros
| Nome | Onde | Obrig. | Tipo | Descrição / restrições |
|---|---|---|---|---|
id | caminho | ✅ sim | integer | ID do convênio — mín. 1 |
Corpo (application/json) — obrigatório
Campos obrigatórios: planos, planos[].planoId
| Campo | Tipo | Obrig. | Descrição / restrições |
|---|---|---|---|
planos | array<object> | ✅ | máx. itens 200; mín. itens 1 |
planos[].planoId | integer | ✅ | ID do plano cadastrado no sistema (coluna Plano da tela) |
planos[].utiliza | boolean | Coluna Atende. Omitido: mantém o valor atual (ou false se o vínculo for novo). |
Respostas
200— Todos os planos foram processados207— Processado com falhas parciais. Vejaresultados.400—idinválido, lista vazia, sem a chaveplanosou acima de 200 itens401— Token ausente, inválido, revogado ou expirado403— A chave não tem a permissão exigida pela rota (devolvida emescopoFaltante)404— Convênio não encontrado429— Já existe uma atualização em andamento para este convênio503— Não foi possível validar a chave no momento — falha de rede/indisponibilidade, não problema com a chave em si
GET /convenios/{id}/farol/produtos
Farol de produtos do convênio · Permissão: convenio:read
Espelha a tela interna Farol do Convênio.
Parâmetros
| Nome | Onde | Obrig. | Tipo | Descrição / restrições |
|---|---|---|---|---|
id | caminho | ✅ sim | integer | ID do convênio — mín. 1 |
page | query | não | integer | padrão 1; mín. 1 |
pageSize | query | não | integer | padrão 50; mín. 1; máx. 200 |
produto | query | não | string | |
codigo | query | não | string | |
farol | query | não | string | Lista separada por vírgula |
ativoNoConvenio | query | não | boolean | |
produtoAtivo | query | não | boolean | |
search | query | não | string | |
sortBy | query | não | string | |
sortOrder | query | não | string | valores: asc, desc |
Respostas
200— Lista paginada400—idinválido401— Token ausente, inválido, revogado ou expirado403— A chave não tem a permissão exigida pela rota (devolvida emescopoFaltante)404— Convênio não encontrado503— Não foi possível validar a chave no momento — falha de rede/indisponibilidade, não problema com a chave em si
GET /convenios/{id}/farol/servicos
Farol de serviços do convênio · Permissão: convenio:read
Espelha a tela interna Farol do Convênio.
Parâmetros
| Nome | Onde | Obrig. | Tipo | Descrição / restrições |
|---|---|---|---|---|
id | caminho | ✅ sim | integer | ID do convênio — mín. 1 |
page | query | não | integer | padrão 1; mín. 1 |
pageSize | query | não | integer | padrão 50; mín. 1; máx. 200 |
servico | query | não | string | |
codigo | query | não | string | |
farol | query | não | string | Lista separada por vírgula |
ativoNoConvenio | query | não | boolean | |
servicoAtivo | query | não | boolean | |
search | query | não | string | |
sortBy | query | não | string | |
sortOrder | query | não | string | valores: asc, desc |
Respostas
200— Lista paginada400—idinválido401— Token ausente, inválido, revogado ou expirado403— A chave não tem a permissão exigida pela rota (devolvida emescopoFaltante)404— Convênio não encontrado503— Não foi possível validar a chave no momento — falha de rede/indisponibilidade, não problema com a chave em si
GET /convenios/{id}/farol/itens
Árvore de composição do convênio (produtos, taxas e sub-serviços) · Permissão: convenio:read
Espelha a tela interna Farol do Convênio, aba Itens. Consulta filtrada no banco por fn_servico_convenio_itens(convenio_id, servico_raiz_id) — filtra convênio (e, opcionalmente, o serviço raiz) antes de montar a árvore de composição, em vez de calcular pra todos os convênios e filtrar depois.
Parâmetros
| Nome | Onde | Obrig. | Tipo | Descrição / restrições |
|---|---|---|---|---|
id | caminho | ✅ sim | integer | ID do convênio — mín. 1 |
page | query | não | integer | padrão 1; mín. 1 |
pageSize | query | não | integer | padrão 50; mín. 1; máx. 200 |
servicoRaizId | query | não | integer | |
itemTipo | query | não | string | |
itemNome | query | não | string | |
search | query | não | string | |
apenasAtivosNoConvenio | query | não | boolean | Restringe aos serviços contratados pelo convênio (vínculo utiliza) — não confundir com servicoAtivo. |
servicoAtivo | query | não | boolean | Filtra pelo cadastro do serviço raiz estar ativo/inativo (servico.ativo), igual a produtoAtivo em /farol/produtos e servicoAtivo em /farol/servicos. |
Respostas
200— Lista paginada400—idinválido401— Token ausente, inválido, revogado ou expirado403— A chave não tem a permissão exigida pela rota (devolvida emescopoFaltante)404— Convênio não encontrado503— Não foi possível validar a chave no momento — falha de rede/indisponibilidade, não problema com a chave em si
GET /convenios/{id}/farol/itens/{servicoRaizId}
Árvore de composição de um único serviço raiz (versão enxuta) · Permissão: convenio:read
Chama fn_servico_convenio_itens(convenio_id, servico_raiz_id) direto, sem paginação nem pós-processamento — farol_servico/margem_servico_pct/os totais por subárvore já vêm calculados pela própria função em SQL, por linha (cada SUBSERVICO mostra o total da SUA subárvore, não do serviço raiz inteiro). Preferível a /farol/itens quando já se sabe qual serviço raiz consultar: resultado sem envelope de paginação, tipicamente poucas dezenas de linhas.
Parâmetros
| Nome | Onde | Obrig. | Tipo | Descrição / restrições |
|---|---|---|---|---|
id | caminho | ✅ sim | integer | ID do convênio — mín. 1 |
servicoRaizId | caminho | ✅ sim | integer |
Respostas
200— Array com a árvore de composição inteira do serviço raiz (mesmo shape de item de /farol/itens).400—idouservicoRaizIdinválido401— Token ausente, inválido, revogado ou expirado403— A chave não tem a permissão exigida pela rota (devolvida emescopoFaltante)404— Convênio não encontrado, ou serviço raiz não encontrado/não utilizado neste convênio503— Não foi possível validar a chave no momento — falha de rede/indisponibilidade, não problema com a chave em si
GET /convenios/{id}
Consultar convênio · Permissão: convenio:read
Parâmetros
| Nome | Onde | Obrig. | Tipo | Descrição / restrições |
|---|---|---|---|---|
id | caminho | ✅ sim | integer | ID do convênio — mín. 1 |
Respostas
200— Convênio400—idinválido401— Token ausente, inválido, revogado ou expirado403— A chave não tem a permissão exigida pela rota (devolvida emescopoFaltante)404— Convênio não encontrado503— Não foi possível validar a chave no momento — falha de rede/indisponibilidade, não problema com a chave em si
PUT /convenios/{id}
Atualizar convênio · Permissão: convenio:update
Atualização parcial: campo omitido mantém o valor atual; null limpa; lista omitida mantém; lista enviada substitui.
empresaIdeunidadesIdsomitidos mantêm.unidadesIdsenviado é a lista completa: unidades fora dela são desativadas no convênio.operadoraId,dataFim,dataReajuste,dataRenovacao,exigirTokeneprazoLimiteEntregaGuiasomitidos mantêm;nulllimpa/desvincula.politicasPorTipoProduto, quando enviado, é a lista completa: políticas que não estiverem nela são inativadas. Se for omitido, as políticas existentes não são alteradas.- Aceita os nomes da leitura
limiteParcelasConveniosekitDocumentosId.
Parâmetros
| Nome | Onde | Obrig. | Tipo | Descrição / restrições |
|---|---|---|---|---|
id | caminho | ✅ sim | integer | ID do convênio — mín. 1 |
Corpo (application/json) — obrigatório
Campos obrigatórios: descricao, dataInicio, empresaId, unidadesIds
Se enviar politicasPorTipoProduto, exige: politicasPorTipoProduto[].tipoProdutoId, politicasPorTipoProduto[].fatorK, politicasPorTipoProduto[].idJson
Todos os campos do corpo (36)
| Campo | Tipo | Obrig. | Descrição / restrições |
|---|---|---|---|
nomeFantasia | string | ||
razaoSocial | string | ||
cnpj | string | Único por clínica | |
descricao | string | ✅ | |
codigo | integer | ||
telefone | string | ||
email | string | ||
pessoaDeContato | string | ||
observacao | string | ||
dataInicio | string (date-time) | ✅ | |
dataFim | string (date-time) | aceita null | |
dataReajuste | string (date-time) | aceita null | |
dataRenovacao | string (date-time) | aceita null | |
prazoRecursoGlosa | integer | ||
prazoPagamentoRecursoGlosa | integer | ||
prazoReajuste | integer | ||
prazoAutorizacao | integer | ||
prazoPagamento | integer | ||
prazoRetorno | integer | ||
prazoLimiteEntregaGuias | integer | ||
limiteParcelasConvenioParticular | integer | ||
fatorK | number | ||
faturadoPagamento | boolean | ||
exigirToken | boolean | ||
operadoraId | string | ID da operadora | |
empresaId | string | ✅ | ID da empresa dona do convênio ("Empresa Principal" na tela do sistema). |
unidadesIds | array<integer> | ✅ | IDs das filiais/unidades ("Unidades" na tela do sistema) em que esse convênio é aceito na agenda. Pode incluir o mesmo ID de empresaId. |
kitDocumentosPadrao | object | ||
kitDocumentosPadrao.id | integer | ||
xmlConsultaId | integer | ||
xmlSpSadtId | integer | ||
politicasPorTipoProduto | array<object> | ||
politicasPorTipoProduto[].tipoProdutoId | integer | ✅ | |
politicasPorTipoProduto[].fatorK | string | ✅ | Percentual. Aceita vírgula ou ponto. |
politicasPorTipoProduto[].idJson | string | ✅ | JSON serializado com fontePrecoId e tipoPrecificacao |
codigoANS | string | Código/registro ANS. Na atualização, o nome do campo é codigoANS. |
Respostas
200— Convênio atualizado400—idinválido401— Token ausente, inválido, revogado ou expirado403— A chave não tem a permissão exigida pela rota (devolvida emescopoFaltante)404— Convênio não encontrado409— CNPJ já existe no sistema503— Não foi possível validar a chave no momento — falha de rede/indisponibilidade, não problema com a chave em si
DELETE /convenios/{id}
Desativar convênio · Permissão: convenio:delete
É uma desativação (ativo = false), não uma exclusão física. Se o convênio estiver em agendamentos ativos, a resposta traz um aviso.
Parâmetros
| Nome | Onde | Obrig. | Tipo | Descrição / restrições |
|---|---|---|---|---|
id | caminho | ✅ sim | integer | ID do convênio — mín. 1 |
Respostas
200— Convênio desativado400—idinválido401— Token ausente, inválido, revogado ou expirado403— A chave não tem a permissão exigida pela rota (devolvida emescopoFaltante)503— Não foi possível validar a chave no momento — falha de rede/indisponibilidade, não problema com a chave em si
Tabelas de Preço 8 operações
Tabela de preço interna e preço de produto dentro dela.
GET /tabelas-preco
Listar tabelas de preço · Permissão: tabelaPreco:read
Respostas
200— Lista401— Token ausente, inválido, revogado ou expirado403— A chave não tem a permissão exigida pela rota (devolvida emescopoFaltante)503— Não foi possível validar a chave no momento — falha de rede/indisponibilidade, não problema com a chave em si
POST /tabelas-preco
Cadastrar tabela de preço · Permissão: tabelaPreco:create
Corpo (application/json) — obrigatório
Campos obrigatórios: name, priceType1
| Campo | Tipo | Obrig. | Descrição / restrições |
|---|---|---|---|
name | string | ✅ | |
description | string | aceita null | |
priceType1 | string | ✅ | |
priceType2 | string | aceita null | |
priceType3 | string | aceita null |
Respostas
201— Tabela criada401— Token ausente, inválido, revogado ou expirado403— A chave não tem a permissão exigida pela rota (devolvida emescopoFaltante)503— Não foi possível validar a chave no momento — falha de rede/indisponibilidade, não problema com a chave em si
GET /tabelas-preco/{id}
Consultar tabela de preço · Permissão: tabelaPreco:read
Parâmetros
| Nome | Onde | Obrig. | Tipo | Descrição / restrições |
|---|---|---|---|---|
id | caminho | ✅ sim | integer | ID do registro desta rota (o Swagger publicado rotula como "ID do convênio" por engano de rótulo) — mín. 1 |
Respostas
200— Tabela de preço401— Token ausente, inválido, revogado ou expirado403— A chave não tem a permissão exigida pela rota (devolvida emescopoFaltante)404— Tabela não encontrada503— Não foi possível validar a chave no momento — falha de rede/indisponibilidade, não problema com a chave em si
PUT /tabelas-preco/{id}
Atualizar tabela de preço · Permissão: tabelaPreco:update
nome é forçado para MAIÚSCULAS no servidor, mesmo enviando minúsculas/misto.
Parâmetros
| Nome | Onde | Obrig. | Tipo | Descrição / restrições |
|---|---|---|---|---|
id | caminho | ✅ sim | integer | ID do registro desta rota (o Swagger publicado rotula como "ID do convênio" por engano de rótulo) — mín. 1 |
Corpo (application/json) — obrigatório
Campos obrigatórios: name, priceType1
| Campo | Tipo | Obrig. | Descrição / restrições |
|---|---|---|---|
name | string | ✅ | |
description | string | aceita null | |
priceType1 | string | ✅ | |
priceType2 | string | aceita null | |
priceType3 | string | aceita null |
Respostas
200— Row completa, sem include.401— Token ausente, inválido, revogado ou expirado403— A chave não tem a permissão exigida pela rota (devolvida emescopoFaltante)404— Tabela não encontrada503— Não foi possível validar a chave no momento — falha de rede/indisponibilidade, não problema com a chave em si
GET /tabelas-preco/precificacao
Listar tabelas com sua precificação · Permissão: tabelaPreco:read
Não é a lista de tabelas em si — é a lista de opções de precificação selecionáveis (uma tabela pode gerar até 3 opções, uma por tipoPrecificacao1/2/3 configurado, ou 1 opção sem tipo se a tabela for immutable e não tiver nenhum tipo configurado). Sem envelope de paginação.
Respostas
200— Array direto.401— Token ausente, inválido, revogado ou expirado403— A chave não tem a permissão exigida pela rota (devolvida emescopoFaltante)503— Não foi possível validar a chave no momento — falha de rede/indisponibilidade, não problema com a chave em si
GET /tabelas-preco/produtos
Listar preço de produtos dentro de uma tabela · Permissão: tabelaPreco:read
Não usa o envelope padrão {dados, page, pageSize, total, totalPages} desta API — devolve {data, meta} cru do use case interno.
Parâmetros
| Nome | Onde | Obrig. | Tipo | Descrição / restrições |
|---|---|---|---|---|
id | query | não | integer | ID da tabela de preço |
page | query | não | integer | padrão 1; mín. 1 |
pageSize | query | não | integer | padrão 50; mín. 1; máx. 200 |
Respostas
200— Lista paginada — shape próprio, fora do padrão.401— Token ausente, inválido, revogado ou expirado403— A chave não tem a permissão exigida pela rota (devolvida emescopoFaltante)503— Não foi possível validar a chave no momento — falha de rede/indisponibilidade, não problema com a chave em si
POST /tabelas-preco/produtos
Cadastrar/atualizar preço de um produto na tabela · Permissão: tabelaPreco:update
É upsert — chamar de novo com o mesmo productId/purchasePriceSourceId atualiza o preço em vez de duplicar. Preços (priceType1..3) em reais, mesma unidade do POST /tabelas-preco/produtos/bulk e do GET /tabelas-preco/produtos.
Corpo (application/json) — obrigatório
Campos obrigatórios: purchasePriceSourceId, productId
| Campo | Tipo | Obrig. | Descrição / restrições |
|---|---|---|---|
purchasePriceSourceId | integer | ✅ | ID da tabela de preço |
productId | integer | ✅ | |
parcelas_maximas | integer | aceita null | |
productCode | string | aceita null | |
productCodeTypeId | integer | aceita null | |
priceType1 | number | Em reais (ex.: 19547.56 = R$ 19.547,56). Gravado em centavos. Omitido mantém; null limpa. — aceita null | |
priceType2 | number | Em reais. Mesmas regras de priceType1. — aceita null | |
priceType3 | number | Em reais. Mesmas regras de priceType1. — aceita null |
Respostas
200— Registro gravado, cru do banco:precificacao1..3vêm em centavos (ex.: 1954756 = R$ 19.547,56). OGET /tabelas-preco/produtosdevolve em reais.401— Token ausente, inválido, revogado ou expirado403— A chave não tem a permissão exigida pela rota (devolvida emescopoFaltante)503— Não foi possível validar a chave no momento — falha de rede/indisponibilidade, não problema com a chave em si
POST /tabelas-preco/produtos/bulk
Cadastrar/atualizar preço de vários produtos de uma vez · Permissão: tabelaPreco:update
Até 200 itens por requisição (chave precos). 207 = falha parcial. Preços (priceType1..3) em reais, mesma unidade do POST /tabelas-preco/produtos — o mesmo valor enviado pelas duas rotas grava igual. Até 28/09/2026 17:43 (Brasília) esta rota gravava o valor sem converter para centavos (aparecia dividido por 100); corrigido desde então.
Corpo (application/json) — obrigatório
Campos obrigatórios: precos, precos[].purchasePriceSourceId, precos[].productId
Cada item de precos[] tem os mesmos campos de POST /tabelas-preco/produtos (máx. 200 itens).
| Campo | Tipo | Obrig. | Descrição / restrições |
|---|---|---|---|
precos | array<object> | ✅ | máx. itens 200 |
Respostas
201— Todos processados207— Falha parcial400— Lote vazio ou acima de 200 itens401— Token ausente, inválido, revogado ou expirado403— A chave não tem a permissão exigida pela rota (devolvida emescopoFaltante)429— Já existe um lote em andamento para esta clínica e recurso503— Não foi possível validar a chave no momento — falha de rede/indisponibilidade, não problema com a chave em si
Pacientes 11 operações
Cadastro de pacientes da clínica.
Migração em lote por POST /pacientes/bulk (até 50 por requisição). PUT /pacientes/{id} exige o objeto completo.
GET /pacientes
Listar pacientes · Permissão: paciente:read
Parâmetros
| Nome | Onde | Obrig. | Tipo | Descrição / restrições |
|---|---|---|---|---|
page | query | não | integer | padrão 1; mín. 1 |
pageSize | query | não | integer | padrão 50; mín. 1; máx. 200 |
ativo | query | não | boolean | Sem informar, lista ativos e inativos. |
Respostas
200— Lista paginada401— Token ausente, inválido, revogado ou expirado403— A chave não tem a permissão exigida pela rota (devolvida emescopoFaltante)503— Não foi possível validar a chave no momento — falha de rede/indisponibilidade, não problema com a chave em si
POST /pacientes
Cadastrar paciente · Permissão: paciente:create
Corpo (application/json) — obrigatório
Campos obrigatórios: nome, sexoId, contato, contato[].email, contato[].celular, endereco
Se enviar convenioPlano, exige: convenioPlano[].convenioId
Todos os campos do corpo (32)
| Campo | Tipo | Obrig. | Descrição / restrições |
|---|---|---|---|
nome | string | ✅ | Nome civil (oficial) |
nomeSocial | string | Nome social (opcional). Exibido nas telas como SOCIAL (civil) e enviado automaticamente no campo Nome Social da guia/XML TISS. null ou vazio limpa. — aceita null | |
rg | string | aceita null | |
cpf | string | Obrigatório, salvo para recém-nascido sem CPF (usar cpfMae) | |
orgaoEmissor | string | aceita null | |
ufRg | string | aceita null | |
dataDeNascimento | string (date) | ||
sexoId | integer | ✅ | |
estrangeiro | boolean | padrão False | |
estadoCivil | string | aceita null | |
profissao | string | aceita null | |
atendimentoRn | boolean | Atendimento de recém-nascido — dispensa CPF próprio se cpfMae for informado — padrão False | |
cpfMae | string | aceita null | |
contato | array<object> | ✅ | mín. itens 1 |
contato[].pessoaDeContato | string | aceita null | |
contato[].email | string | ✅ | |
contato[].celular | string | ✅ | |
contato[].telefone | string | aceita null | |
endereco | object | ✅ | |
endereco.cep | string | ||
endereco.endereco | string | ||
endereco.numero | string | ||
endereco.complemento | string | aceita null | |
endereco.bairro | string | ||
endereco.cidade | string | ||
endereco.unidadeFederativaId | integer | aceita null | |
convenioPlano | array<object> | ||
convenioPlano[].convenioId | integer | ✅ | |
convenioPlano[].planoId | integer | aceita null | |
convenioPlano[].numeroDaCarterinha | string | aceita null | |
convenioPlano[].validade | string (date) | aceita null | |
convenioPlano[].ativo | boolean | padrão True |
Respostas
201— Paciente criado400— CPF inválido, contato obrigatório ausente ou dado inconsistente401— Token ausente, inválido, revogado ou expirado403— A chave não tem a permissão exigida pela rota (devolvida emescopoFaltante)409— CPF já cadastrado nesta clínica503— Não foi possível validar a chave no momento — falha de rede/indisponibilidade, não problema com a chave em si
POST /pacientes/bulk
Cadastrar vários pacientes de uma vez · Permissão: paciente:create
Até 50 itens por requisição (chave pacientes). 207 = falha parcial, ver resultados; reenvie só os itens com erro.
Corpo (application/json) — obrigatório
Campos obrigatórios: pacientes, pacientes[].nome, pacientes[].sexoId, pacientes[].contato, pacientes[].contato[].email, pacientes[].contato[].celular, pacientes[].endereco
Se enviar pacientes[].convenioPlano, exige: pacientes[].convenioPlano[].convenioId
Cada item de pacientes[] tem os mesmos campos de POST /pacientes (máx. 50 itens).
| Campo | Tipo | Obrig. | Descrição / restrições |
|---|---|---|---|
pacientes | array<object> | ✅ | máx. itens 50 |
Respostas
201— Todos criados207— Falha parcial400— Lote vazio ou acima de 50 itens401— Token ausente, inválido, revogado ou expirado403— A chave não tem a permissão exigida pela rota (devolvida emescopoFaltante)429— Já existe um lote em andamento para esta clínica e recurso503— Não foi possível validar a chave no momento — falha de rede/indisponibilidade, não problema com a chave em si
GET /pacientes/{id}
Consultar paciente · Permissão: paciente:read
Parâmetros
| Nome | Onde | Obrig. | Tipo | Descrição / restrições |
|---|---|---|---|---|
id | caminho | ✅ sim | integer | ID do paciente — mín. 1 |
Respostas
200— Paciente400—idinválido401— Token ausente, inválido, revogado ou expirado403— A chave não tem a permissão exigida pela rota (devolvida emescopoFaltante)404— Paciente não encontrado503— Não foi possível validar a chave no momento — falha de rede/indisponibilidade, não problema com a chave em si
PUT /pacientes/{id}
Atualizar paciente · Permissão: paciente:update
Atualização parcial: campo omitido mantém o valor atual; null limpa; lista omitida mantém; lista enviada substitui ([] apaga).
atendimentoRn,estrangeiro,cpfecpfMaeomitidos mantêm (o CPF só é revalidado quando um deles vem).contatoomitido mantém os contatos. Enviado, substitui: contatos comidque não vieram são inativados; contato comativo: falsecontinua inativo.convenioPlanoomitido mantém as carteiras. Enviado, substitui: carteira comidque não veio é inativada (semidem nenhuma, todas são inativadas e as enviadas criadas de novo).endereco: campo omitido mantém;numero/complementonulllimpa.- Aceita os nomes da leitura:
contatos,atendimentoRN, endereço com maiúsculas (Cep,Endereco,Numero,Complemento,Bairro,Cidade) eresponsavelLegalNome/responsavelLegalCpf/responsavelLegalParentesco.
Parâmetros
| Nome | Onde | Obrig. | Tipo | Descrição / restrições |
|---|---|---|---|---|
id | caminho | ✅ sim | integer | ID do paciente — mín. 1 |
Corpo (application/json) — obrigatório
Campos obrigatórios: nome, sexoId, contato, contato[].email, contato[].celular, endereco
Se enviar convenioPlano, exige: convenioPlano[].convenioId
Todos os campos do corpo (32)
| Campo | Tipo | Obrig. | Descrição / restrições |
|---|---|---|---|
nome | string | ✅ | Nome civil (oficial) |
nomeSocial | string | Nome social (opcional). Exibido nas telas como SOCIAL (civil) e enviado automaticamente no campo Nome Social da guia/XML TISS. null ou vazio limpa. — aceita null | |
rg | string | aceita null | |
cpf | string | Obrigatório, salvo para recém-nascido sem CPF (usar cpfMae) | |
orgaoEmissor | string | aceita null | |
ufRg | string | aceita null | |
dataDeNascimento | string (date) | ||
sexoId | integer | ✅ | |
estrangeiro | boolean | padrão False | |
estadoCivil | string | aceita null | |
profissao | string | aceita null | |
atendimentoRn | boolean | Atendimento de recém-nascido — dispensa CPF próprio se cpfMae for informado — padrão False | |
cpfMae | string | aceita null | |
contato | array<object> | ✅ | mín. itens 1 |
contato[].pessoaDeContato | string | aceita null | |
contato[].email | string | ✅ | |
contato[].celular | string | ✅ | |
contato[].telefone | string | aceita null | |
endereco | object | ✅ | |
endereco.cep | string | ||
endereco.endereco | string | ||
endereco.numero | string | ||
endereco.complemento | string | aceita null | |
endereco.bairro | string | ||
endereco.cidade | string | ||
endereco.unidadeFederativaId | integer | aceita null | |
convenioPlano | array<object> | ||
convenioPlano[].convenioId | integer | ✅ | |
convenioPlano[].planoId | integer | aceita null | |
convenioPlano[].numeroDaCarterinha | string | aceita null | |
convenioPlano[].validade | string (date) | aceita null | |
convenioPlano[].ativo | boolean | padrão True |
Respostas
200— Paciente atualizado400— CPF inválido ou dado inconsistente401— Token ausente, inválido, revogado ou expirado403— A chave não tem a permissão exigida pela rota (devolvida emescopoFaltante)404— Paciente não encontrado503— Não foi possível validar a chave no momento — falha de rede/indisponibilidade, não problema com a chave em si
DELETE /pacientes/{id}
Desativar paciente · Permissão: paciente:delete
É uma desativação (ativo = false), não uma exclusão física.
Parâmetros
| Nome | Onde | Obrig. | Tipo | Descrição / restrições |
|---|---|---|---|---|
id | caminho | ✅ sim | integer | ID do paciente — mín. 1 |
Respostas
200— Corpo de sucesso é o número cru201, não um objeto — comportamento observado, não intenção de design.401— Token ausente, inválido, revogado ou expirado403— A chave não tem a permissão exigida pela rota (devolvida emescopoFaltante)503— Não foi possível validar a chave no momento — falha de rede/indisponibilidade, não problema com a chave em si
GET /pacientes/{id}/convenios
Listar convênios/planos vinculados ao paciente · Permissão: paciente:read
Parâmetros
| Nome | Onde | Obrig. | Tipo | Descrição / restrições |
|---|---|---|---|---|
id | caminho | ✅ sim | integer | ID do paciente — mín. 1 |
page | query | não | integer | padrão 1; mín. 1 |
pageSize | query | não | integer | padrão 50; mín. 1; máx. 200 |
Respostas
200— Lista paginada400—idinválido401— Token ausente, inválido, revogado ou expirado403— A chave não tem a permissão exigida pela rota (devolvida emescopoFaltante)404— Paciente não encontrado503— Não foi possível validar a chave no momento — falha de rede/indisponibilidade, não problema com a chave em si
POST /pacientes/{id}/convenios
Vincular convênio(s)/plano(s) ao paciente · Permissão: paciente:update
Sempre cria um novo vínculo — não atualiza um existente (use PUT /pacientes/{id}/convenios/{vinculoId} para isso).
Parâmetros
| Nome | Onde | Obrig. | Tipo | Descrição / restrições |
|---|---|---|---|---|
id | caminho | ✅ sim | integer | ID do paciente — mín. 1 |
Corpo (application/json) — obrigatório
Campos obrigatórios: convenioPlano, convenioPlano[].convenioId
| Campo | Tipo | Obrig. | Descrição / restrições |
|---|---|---|---|
convenioPlano | array<object> | ✅ | mín. itens 1 |
convenioPlano[].convenioId | integer | ✅ | |
convenioPlano[].planoId | integer | aceita null | |
convenioPlano[].numeroDaCarterinha | string | aceita null | |
convenioPlano[].validade | string (date) | aceita null | |
convenioPlano[].ativo | boolean | padrão True |
Respostas
201— Corpo de sucesso é o número cru201, não os vínculos criados — internamente o use case monta o registro completo (com convênio/plano/paciente incluídos) mas descarta esse resultado antes de retornar. Se precisar dos ids, consulte depois comGET /pacientes/{id}/convenios.400— Convênio/plano não encontrado ou número de carteirinha já em uso401— Token ausente, inválido, revogado ou expirado403— A chave não tem a permissão exigida pela rota (devolvida emescopoFaltante)404— Paciente não encontrado503— Não foi possível validar a chave no momento — falha de rede/indisponibilidade, não problema com a chave em si
PUT /pacientes/{id}/convenios/{vinculoId}
Atualizar um vínculo de convênio do paciente · Permissão: paciente:update
vinculoId é o id retornado por GET /pacientes/{id}/convenios, não o id do convênio. Atualização parcial: convenioId, planoId, numeroDaCarterinha e validade omitidos mantêm; null ou "" limpa.
Parâmetros
| Nome | Onde | Obrig. | Tipo | Descrição / restrições |
|---|---|---|---|---|
id | caminho | ✅ sim | integer | ID do paciente — mín. 1 |
vinculoId | caminho | ✅ sim | integer | ID do vínculo paciente-convênio (não é o ID do convênio nem do paciente) — mín. 1 |
Corpo (application/json) — obrigatório
Campos obrigatórios: convenioId
| Campo | Tipo | Obrig. | Descrição / restrições |
|---|---|---|---|
convenioId | integer | ✅ | |
planoId | integer | aceita null | |
numeroDaCarterinha | string | aceita null | |
validade | string (date) | aceita null |
Respostas
200— Vínculo atualizado400— Convênio/plano não encontrado ou número de carteirinha já em uso401— Token ausente, inválido, revogado ou expirado403— A chave não tem a permissão exigida pela rota (devolvida emescopoFaltante)404— Vínculo não encontrado para este paciente503— Não foi possível validar a chave no momento — falha de rede/indisponibilidade, não problema com a chave em si
GET /pacientes/{id}/anexos
Listar anexos do paciente · Permissão: paciente:read
Cada anexo traz uma url assinada, válida por 1 hora.
Parâmetros
| Nome | Onde | Obrig. | Tipo | Descrição / restrições |
|---|---|---|---|---|
id | caminho | ✅ sim | integer | ID do paciente — mín. 1 |
Respostas
200— Lista de anexos400—idinválido401— Token ausente, inválido, revogado ou expirado403— A chave não tem a permissão exigida pela rota (devolvida emescopoFaltante)404— Paciente não encontrado503— Não foi possível validar a chave no momento — falha de rede/indisponibilidade, não problema com a chave em si
POST /pacientes/{id}/anexos
Enviar anexo(s) do paciente · Permissão: paciente:update
multipart/form-data, campo file (até 10 arquivos por requisição). Formatos aceitos: JPG, PNG e PDF, até 10MB cada. Campo opcional tipoAnexoId no corpo classifica o tipo de documento.
Não há rota de exclusão de anexo nesta API — é uma operação restrita à tela do sistema.
Parâmetros
| Nome | Onde | Obrig. | Tipo | Descrição / restrições |
|---|---|---|---|---|
id | caminho | ✅ sim | integer | ID do paciente — mín. 1 |
Corpo (multipart/form-data) — obrigatório
Campos obrigatórios: file
| Campo | Tipo | Obrig. | Descrição / restrições |
|---|---|---|---|
file | array<string> | ✅ | |
tipoAnexoId | integer | aceita null |
Respostas
200— Anexo(s) enviado(s). SetipoAnexoIdfor informado, anexos antigos do mesmo tipo são desativados (ativo:false) antes de criar os novos — não aparece no corpo.400— Nenhum arquivo enviado, formato não permitido ou acima de 10MB401— Token ausente, inválido, revogado ou expirado403— A chave não tem a permissão exigida pela rota (devolvida emescopoFaltante)404— Paciente não encontrado503— Não foi possível validar a chave no momento — falha de rede/indisponibilidade, não problema com a chave em si
Continue por aqui: Visão geral e autenticação · Implantação pela API · Erros e boas práticas