📚 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.

ℹ️ Como ler esta referência

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

GrupoOperaçõesRotas
Empresas5GET /empresas · POST /empresas · GET /empresas/{id} · PUT /empresas/{id} · DELETE /empresas/{id}
Depósitos6GET /depositos · POST /depositos · POST /depositos/bulk · GET /depositos/{id} · PUT /depositos/{id} · DELETE /depositos/{id}
Locais5GET /locais · POST /locais · GET /locais/{id} · PUT /locais/{id} · DELETE /locais/{id}
Auxiliares14GET /auxiliares/tipos-produto · GET /auxiliares/tipos-codigo · GET /auxiliares/tabelas-ans87 · GET /auxiliares/regimes-atendimento · GET /auxiliares/tipos-servico · GET /auxiliares/tipos-guia · GET /auxiliares/tipos-taxa · GET /auxiliares/unidades-medida · GET /auxiliares/principios-ativos · GET /auxiliares/sexos · GET /auxiliares/estados-civis · GET /auxiliares/conselhos-profissionais · GET /auxiliares/unidades-federativas · GET /auxiliares/tipos-atendimento
Operadoras6GET /operadoras · POST /operadoras · POST /operadoras/bulk · GET /operadoras/{id} · PUT /operadoras/{id} · DELETE /operadoras/{id}
Fornecedores5GET /fornecedores · POST /fornecedores · POST /fornecedores/bulk · GET /fornecedores/{id} · PUT /fornecedores/{id}
Fabricantes6GET /fabricantes · POST /fabricantes · POST /fabricantes/bulk · GET /fabricantes/{id} · PUT /fabricantes/{id} · DELETE /fabricantes/{id}
Taxas6GET /taxas · POST /taxas · POST /taxas/bulk · GET /taxas/{id} · PUT /taxas/{id} · DELETE /taxas/{id}
Produtos6GET /produtos · POST /produtos · POST /produtos/bulk · GET /produtos/{id} · PUT /produtos/{id} · DELETE /produtos/{id}
Equipamentos6GET /equipamentos · POST /equipamentos · POST /equipamentos/bulk · GET /equipamentos/{id} · PUT /equipamentos/{id} · DELETE /equipamentos/{id}
Serviços6GET /servicos · POST /servicos · POST /servicos/bulk · GET /servicos/{id} · PUT /servicos/{id} · DELETE /servicos/{id}
Colaboradores7GET /colaboradores · POST /colaboradores · POST /colaboradores/bulk · GET /colaboradores/{id} · PUT /colaboradores/{id} · DELETE /colaboradores/{id} · POST /colaboradores/{id}/usuario
Grade de Colaborador7GET /grades-colaborador · POST /grades-colaborador · GET /grades-colaborador/filter · GET /grades-colaborador/{id} · PUT /grades-colaborador/{id} · DELETE /grades-colaborador/{id} · DELETE /grades-colaborador/unique/{id}
Grade de Equipamento5GET /grades-equipamento · POST /grades-equipamento · GET /grades-equipamento/{id} · PUT /grades-equipamento/{id} · DELETE /grades-equipamento/{id}
Convênios22GET /convenios · POST /convenios · POST /convenios/bulk · GET /convenios/{id}/colaboradores · PUT /convenios/{id}/colaboradores · GET /convenios/{id}/taxas · PUT /convenios/{id}/taxas · GET /convenios/{id}/servicos · PUT /convenios/{id}/servicos · GET /convenios/{id}/produtos · PUT /convenios/{id}/produtos · GET /convenios/{id}/especialidades · PUT /convenios/{id}/especialidades · GET /convenios/{id}/planos · PUT /convenios/{id}/planos · GET /convenios/{id}/farol/produtos · GET /convenios/{id}/farol/servicos · GET /convenios/{id}/farol/itens · GET /convenios/{id}/farol/itens/{servicoRaizId} · GET /convenios/{id} · PUT /convenios/{id} · DELETE /convenios/{id}
Tabelas de Preço8GET /tabelas-preco · POST /tabelas-preco · GET /tabelas-preco/{id} · PUT /tabelas-preco/{id} · GET /tabelas-preco/precificacao · GET /tabelas-preco/produtos · POST /tabelas-preco/produtos · POST /tabelas-preco/produtos/bulk
Pacientes11GET /pacientes · POST /pacientes · POST /pacientes/bulk · GET /pacientes/{id} · PUT /pacientes/{id} · DELETE /pacientes/{id} · GET /pacientes/{id}/convenios · POST /pacientes/{id}/convenios · PUT /pacientes/{id}/convenios/{vinculoId} · GET /pacientes/{id}/anexos · POST /pacientes/{id}/anexos

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

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)
CampoTipoObrig.Descrição / restrições
razaoSocialstring✅
nomeFantasiastring✅
cnpjstring✅Único no sistema. Aceita com ou sem máscara.
ativoboolean
cnesstring
tipoContratoIdinteger
dataInicioVigenciastring (date-time)
dataFimVigenciastring (date-time)
dataRenovacaostring (date-time)
telefonestring
telefone2string
celularstring
celular2string
emailstring
email2string
enderecoobject✅
endereco.Cepstring
endereco.Enderecostring
endereco.Numerostring
endereco.Complementostring
endereco.Bairrostring
endereco.Cidadestring
endereco.unidadeFederativaIdobjectAceita o ID da unidade federativa ou a sigla (ex.: "DF").

Respostas

GET /empresas/{id}

Consultar empresa/unidade · Permissão: empresa:read

Parâmetros

NomeOndeObrig.TipoDescrição / restrições
idcaminho✅ simintegerID da empresa/unidade — mín. 1

Respostas

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

NomeOndeObrig.TipoDescrição / restrições
idcaminho✅ simintegerID da empresa/unidade — mín. 1

Corpo (application/json) — obrigatório

Campos obrigatórios: razaoSocial, nomeFantasia, cnpj, endereco

Todos os campos do corpo (23)
CampoTipoObrig.Descrição / restrições
razaoSocialstring✅
nomeFantasiastring✅
cnpjstring✅Único no sistema. Aceita com ou sem máscara.
ativoboolean
cnesstring
tipoContratoIdinteger
dataInicioVigenciastring (date-time)
dataFimVigenciastring (date-time)
dataRenovacaostring (date-time)
telefonestring
telefone2string
celularstring
celular2string
emailstring
email2string
enderecoobject✅
endereco.Cepstring
endereco.Enderecostring
endereco.Numerostring
endereco.Complementostring
endereco.Bairrostring
endereco.Cidadestring
endereco.unidadeFederativaIdobjectAceita o ID da unidade federativa ou a sigla (ex.: "DF").

Respostas

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

NomeOndeObrig.TipoDescrição / restrições
idcaminho✅ simintegerID da empresa/unidade — mín. 1

Respostas

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

NomeOndeObrig.TipoDescrição / restrições
pagequerynãointegerpadrão 1; mín. 1
pageSizequerynãointegerpadrão 50; mín. 1; máx. 200
ativoquerynãoboolean

Respostas

POST /depositos

Cadastrar depósito · Permissão: deposito:create

Corpo (application/json) — obrigatório

Campos obrigatórios: empresaId, descricaoDeposito

CampoTipoObrig.Descrição / restrições
empresaIdinteger✅
descricaoDepositostring✅

Respostas

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).

CampoTipoObrig.Descrição / restrições
depositosarray<object>✅máx. itens 50

Respostas

GET /depositos/{id}

Consultar depósito · Permissão: deposito:read

Parâmetros

NomeOndeObrig.TipoDescrição / restrições
idcaminho✅ simintegerID do depósito — mín. 1

Respostas

PUT /depositos/{id}

Atualizar depósito · Permissão: deposito:update

Bloqueia nome duplicado ativo na mesma empresa (409).

Parâmetros

NomeOndeObrig.TipoDescrição / restrições
idcaminho✅ simintegerID do depósito — mín. 1

Corpo (application/json) — obrigatório

Campos obrigatórios: empresaId, descricaoDeposito

CampoTipoObrig.Descrição / restrições
empresaIdinteger✅
descricaoDepositostring✅

Respostas

DELETE /depositos/{id}

Desativar depósito · Permissão: deposito:delete

Desativação lógica, não exclusão física.

Parâmetros

NomeOndeObrig.TipoDescrição / restrições
idcaminho✅ simintegerID do depósito — mín. 1

Respostas

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

POST /locais

Cadastrar local · Permissão: local:create

Corpo (application/json) — obrigatório

Campos obrigatórios: nome, empresaId, depositoPadraoSaidaId

CampoTipoObrig.Descrição / restrições
nomestring✅
empresaIdinteger✅ID da empresa dona do local.
depositoPadraoSaidaIdinteger✅ID do depósito usado como padrão de saída de estoque nesse local. Precisa estar ativo.

Respostas

GET /locais/{id}

Consultar local · Permissão: local:read

Parâmetros

NomeOndeObrig.TipoDescrição / restrições
idcaminho✅ simintegerID do local — mín. 1

Respostas

PUT /locais/{id}

Atualizar local · Permissão: local:update

Parâmetros

NomeOndeObrig.TipoDescrição / restrições
idcaminho✅ simintegerID do local — mín. 1

Corpo (application/json) — obrigatório

Campos obrigatórios: nome, empresaId, depositoPadraoSaidaId

CampoTipoObrig.Descrição / restrições
nomestring✅
empresaIdinteger✅ID da empresa dona do local.
depositoPadraoSaidaIdinteger✅ID do depósito usado como padrão de saída de estoque nesse local. Precisa estar ativo.

Respostas

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

NomeOndeObrig.TipoDescrição / restrições
idcaminho✅ simintegerID do local — mín. 1

Respostas

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

GET /auxiliares/tipos-codigo

Listar tipos de código · Permissão: auxiliar:read

Respostas

GET /auxiliares/tabelas-ans87

Listar tabelas de domínio ANS 87 · Permissão: auxiliar:read

Respostas

GET /auxiliares/regimes-atendimento

Listar regimes de atendimento · Permissão: auxiliar:read

Respostas

GET /auxiliares/tipos-servico

Listar tipos de serviço · Permissão: auxiliar:read

Respostas

GET /auxiliares/tipos-guia

Listar tipos de guia · Permissão: auxiliar:read

Respostas

GET /auxiliares/tipos-taxa

Listar tipos de taxa · Permissão: auxiliar:read

Respostas

GET /auxiliares/unidades-medida

Listar unidades de medida · Permissão: auxiliar:read

Respostas

GET /auxiliares/principios-ativos

Listar princípios ativos · Permissão: auxiliar:read

Respostas

GET /auxiliares/sexos

Listar sexos · Permissão: auxiliar:read

Respostas

GET /auxiliares/estados-civis

Listar estados civis · Permissão: auxiliar:read

Respostas

GET /auxiliares/conselhos-profissionais

Listar conselhos profissionais · Permissão: auxiliar:read

Respostas

GET /auxiliares/unidades-federativas

Listar unidades federativas · Permissão: auxiliar:read

Respostas

GET /auxiliares/tipos-atendimento

Listar tipos de atendimento · Permissão: auxiliar:read

Respostas

Operadoras 6 operações

Operadoras de convênio.

GET /operadoras

Listar operadoras · Permissão: operadora:read

Parâmetros

NomeOndeObrig.TipoDescrição / restrições
pagequerynãointegerpadrão 1; mín. 1
pageSizequerynãointegerpadrão 50; mín. 1; máx. 200
ativoquerynãobooleanSem informar, lista ativas e inativas.

Respostas

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)
CampoTipoObrig.Descrição / restrições
nomestring✅
descricaostring✅
registroANSstring✅
cnpjstring✅
razaoSocialstringaceita null
codigoCNESstring✅
codigoOperadorastringaceita null
imstringaceita null
identificacaoPrestadorXMLstringComo identificar o prestador no XML TISS — o XSD só aceita um dos dois. — valores: CNPJ, CODIGO_NA_OPERADORA; padrão CNPJ
enderecoobject✅
endereco.cepstring✅
endereco.enderecostring✅
endereco.numerostring✅
endereco.complementostringaceita null
endereco.bairrostring✅
endereco.cidadestring✅
endereco.unidadeFederativastring✅Nome por extenso da UF (não a sigla), precisa bater com um cadastro existente
contatoarray<object>
contato[].pessoaDeContatostringaceita null
contato[].emailstring
contato[].telefonestring
contato[].celularstring
planoarray<object>
plano[].nomestring✅

Respostas

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).

CampoTipoObrig.Descrição / restrições
operadorasarray<object>✅máx. itens 50

Respostas

GET /operadoras/{id}

Consultar operadora · Permissão: operadora:read

Parâmetros

NomeOndeObrig.TipoDescrição / restrições
idcaminho✅ simintegerID da operadora — mín. 1

Respostas

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

NomeOndeObrig.TipoDescrição / restrições
idcaminho✅ simintegerID 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)
CampoTipoObrig.Descrição / restrições
nomestring✅
descricaostring✅
registroANSstring✅
cnpjstring✅
razaoSocialstringaceita null
codigoCNESstring✅
codigoOperadorastringaceita null
imstringaceita null
identificacaoPrestadorXMLstringComo identificar o prestador no XML TISS — o XSD só aceita um dos dois. — valores: CNPJ, CODIGO_NA_OPERADORA; padrão CNPJ
enderecoobject✅
endereco.cepstring✅
endereco.enderecostring✅
endereco.numerostring✅
endereco.complementostringaceita null
endereco.bairrostring✅
endereco.cidadestring✅
endereco.unidadeFederativastring✅Nome por extenso da UF (não a sigla), precisa bater com um cadastro existente
contatoarray<object>
contato[].pessoaDeContatostringaceita null
contato[].emailstring
contato[].telefonestring
contato[].celularstring
planoarray<object>
plano[].nomestring✅

Respostas

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

NomeOndeObrig.TipoDescrição / restrições
idcaminho✅ simintegerID da operadora — mín. 1

Respostas

Fornecedores 5 operações

Fornecedores da clínica.

GET /fornecedores

Listar fornecedores · Permissão: fornecedor:read

Parâmetros

NomeOndeObrig.TipoDescrição / restrições
pagequerynãointegerpadrão 1; mín. 1
pageSizequerynãointegerpadrão 50; mín. 1; máx. 200
searchquerynãostringBusca por nome ou CNPJ

Respostas

POST /fornecedores

Cadastrar fornecedor · Permissão: fornecedor:create

Corpo (application/json) — obrigatório

Campos obrigatórios: nome, cnpj, inscricao, telefoneFornecedor

CampoTipoObrig.Descrição / restrições
nomestring✅
cnpjstring✅Com ou sem máscara
inscricaostring✅
telefoneFornecedorstring✅
enderecoIdintegeraceita null
ativobooleanpadrão True
tipoPrestadorDeServicostringaceita null

Respostas

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).

CampoTipoObrig.Descrição / restrições
fornecedoresarray<object>✅máx. itens 50

Respostas

GET /fornecedores/{id}

Consultar fornecedor · Permissão: fornecedor:read

Inclui endereço e contatos.

Parâmetros

NomeOndeObrig.TipoDescrição / restrições
idcaminho✅ simintegerID do fornecedor — mín. 1

Respostas

PUT /fornecedores/{id}

Atualizar fornecedor · Permissão: fornecedor:update

Parâmetros

NomeOndeObrig.TipoDescrição / restrições
idcaminho✅ simintegerID do fornecedor — mín. 1

Corpo (application/json) — obrigatório

Campos obrigatórios: nome, cnpj, inscricao, telefoneFornecedor

CampoTipoObrig.Descrição / restrições
nomestring✅
cnpjstring✅Com ou sem máscara
inscricaostring✅
telefoneFornecedorstring✅
enderecoIdintegeraceita null
ativobooleanpadrão True
tipoPrestadorDeServicostringaceita null

Respostas

Fabricantes 6 operações

Fabricantes de produtos.

GET /fabricantes

Listar fabricantes · Permissão: fabricante:read

Parâmetros

NomeOndeObrig.TipoDescrição / restrições
pagequerynãointegerpadrão 1; mín. 1
pageSizequerynãointegerpadrão 50; mín. 1; máx. 200
ativoquerynãobooleanSem informar, lista ativos e inativos.

Respostas

POST /fabricantes

Cadastrar fabricante · Permissão: fabricante:create

Corpo (application/json) — obrigatório

Campos obrigatórios: nome

CampoTipoObrig.Descrição / restrições
nomestring✅
anexosarray<object>
anexos[].nomestring
anexos[].caminhoArquivostring

Respostas

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).

CampoTipoObrig.Descrição / restrições
fabricantesarray<object>✅máx. itens 50

Respostas

GET /fabricantes/{id}

Consultar fabricante · Permissão: fabricante:read

Parâmetros

NomeOndeObrig.TipoDescrição / restrições
idcaminho✅ simintegerID do fabricante — mín. 1

Respostas

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

NomeOndeObrig.TipoDescrição / restrições
idcaminho✅ simintegerID do fabricante — mín. 1

Corpo (application/json) — obrigatório

Campos obrigatórios: nome

CampoTipoObrig.Descrição / restrições
nomestring✅
anexosarray<object>
anexos[].nomestring
anexos[].caminhoArquivostring

Respostas

DELETE /fabricantes/{id}

Desativar fabricante · Permissão: fabricante:delete

É uma desativação lógica, não uma exclusão física.

Parâmetros

NomeOndeObrig.TipoDescrição / restrições
idcaminho✅ simintegerID do fabricante — mín. 1

Respostas

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

NomeOndeObrig.TipoDescrição / restrições
pagequerynãointegerpadrão 1; mín. 1
pageSizequerynãointegerpadrão 50; mín. 1; máx. 200
ativoquerynãobooleanSem informar, lista ativas e inativas.

Respostas

POST /taxas

Cadastrar taxa · Permissão: taxa:create

Corpo (application/json) — obrigatório

Campos obrigatórios: taxas, codigoTaxa, tipoTaxaId, valor

CampoTipoObrig.Descrição / restrições
taxasstring✅
descricaostringaceita null
codigoTaxastring✅
tipoTaxaIdinteger✅
tipoCodigoIdintegeraceita null
tabelaANS87IDintegeraceita null
valornumber✅Em reais (não em centavos)

Respostas

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).

CampoTipoObrig.Descrição / restrições
taxasarray<object>✅máx. itens 50

Respostas

GET /taxas/{id}

Consultar taxa · Permissão: taxa:read

Parâmetros

NomeOndeObrig.TipoDescrição / restrições
idcaminho✅ simintegerID da taxa — mín. 1

Respostas

PUT /taxas/{id}

Atualizar taxa · Permissão: taxa:update

Parâmetros

NomeOndeObrig.TipoDescrição / restrições
idcaminho✅ simintegerID da taxa — mín. 1

Corpo (application/json) — obrigatório

Campos obrigatórios: taxas, codigoTaxa, tipoTaxaId, valor

CampoTipoObrig.Descrição / restrições
taxasstring✅
descricaostringaceita null
codigoTaxastring✅
tipoTaxaIdinteger✅
tipoCodigoIdintegeraceita null
tabelaANS87IDintegeraceita null
valornumber✅Em reais (não em centavos)

Respostas

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

NomeOndeObrig.TipoDescrição / restrições
idcaminho✅ simintegerID da taxa — mín. 1

Respostas

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

NomeOndeObrig.TipoDescrição / restrições
pagequerynãointegerpadrão 1; mín. 1
pageSizequerynãointegerpadrão 50; mín. 1; máx. 200
ativoquerynãobooleanSem informar, lista ativos e inativos.
nomequerynãostringFiltro por nome (contém, sem diferenciar maiúsculas)

Respostas

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)
CampoTipoObrig.Descrição / restrições
nomestring✅
codigoProdutostring✅Até 10 caracteres: letras, números, ponto, hífen ou barra (TISS st_texto10)
codigoEANstringGTIN com 8, 12, 13 ou 14 dígitos, como texto (preserva zeros à esquerda). Number ainda é aceito por compatibilidade, mas perde zeros à esquerda. — aceita null
codigoNCMstringNCM com exatamente 8 dígitos, como texto. Number ainda é aceito por compatibilidade, mas perde zeros à esquerda. — aceita null
apresentacaostring✅
contendointeger✅Quantidade na embalagem
depositoIdinteger✅
tipoProdutoIdinteger✅
fabricanteIdinteger✅
principioAtivoIdintegeraceita null
unidadeDeMedidaIdinteger✅
cdIdintegeraceita null
tipoCodigoIdintegeraceita null
tabelaANS87IDintegeraceita null
estoquePodeNegativarbooleanpadrão False
prazoDeReposicaointeger✅Em dias
precoUltimaPesquisanumberaceita null
dataUltimaPesquisastring (date-time)aceita null
fornecedoresarray<integer>IDs dos fornecedores
anexosarray<object>
anexos[].nomestringaceita null
anexos[].caminhoArquivostringReferência a um arquivo já enviado — esta API não faz upload de anexo de produto. — aceita null

Respostas

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).

CampoTipoObrig.Descrição / restrições
produtosarray<object>✅máx. itens 50

Respostas

GET /produtos/{id}

Consultar produto · Permissão: produto:read

Parâmetros

NomeOndeObrig.TipoDescrição / restrições
idcaminho✅ simintegerID do produto — mín. 1

Respostas

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

NomeOndeObrig.TipoDescrição / restrições
idcaminho✅ simintegerID 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)
CampoTipoObrig.Descrição / restrições
nomestring✅
codigoProdutostring✅Até 10 caracteres: letras, números, ponto, hífen ou barra (TISS st_texto10)
codigoEANstringGTIN com 8, 12, 13 ou 14 dígitos, como texto (preserva zeros à esquerda). Number ainda é aceito por compatibilidade, mas perde zeros à esquerda. — aceita null
codigoNCMstringNCM com exatamente 8 dígitos, como texto. Number ainda é aceito por compatibilidade, mas perde zeros à esquerda. — aceita null
apresentacaostring✅
contendointeger✅Quantidade na embalagem
depositoIdinteger✅
tipoProdutoIdinteger✅
fabricanteIdinteger✅
principioAtivoIdintegeraceita null
unidadeDeMedidaIdinteger✅
cdIdintegeraceita null
tipoCodigoIdintegeraceita null
tabelaANS87IDintegeraceita null
estoquePodeNegativarbooleanpadrão False
prazoDeReposicaointeger✅Em dias
precoUltimaPesquisanumberaceita null
dataUltimaPesquisastring (date-time)aceita null
fornecedoresarray<integer>IDs dos fornecedores
anexosarray<object>
anexos[].nomestringaceita null
anexos[].caminhoArquivostringReferência a um arquivo já enviado — esta API não faz upload de anexo de produto. — aceita null

Respostas

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

NomeOndeObrig.TipoDescrição / restrições
idcaminho✅ simintegerID do produto — mín. 1

Respostas

Equipamentos 6 operações

Equipamentos da clínica.

GET /equipamentos

Listar equipamentos · Permissão: equipamento:read

Parâmetros

NomeOndeObrig.TipoDescrição / restrições
pagequerynãointegerpadrão 1; mín. 1
pageSizequerynãointegerpadrão 50; mín. 1; máx. 200
ativoquerynãobooleanSem informar, lista ativos e inativos.

Respostas

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

CampoTipoObrig.Descrição / restrições
nomestring✅

Respostas

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).

CampoTipoObrig.Descrição / restrições
equipamentosarray<object>✅máx. itens 50

Respostas

GET /equipamentos/{id}

Consultar equipamento · Permissão: equipamento:read

Parâmetros

NomeOndeObrig.TipoDescrição / restrições
idcaminho✅ simintegerID do equipamento — mín. 1

Respostas

PUT /equipamentos/{id}

Atualizar equipamento · Permissão: equipamento:update

Recusa (422) se já existir outro equipamento ativo com o mesmo nome.

Parâmetros

NomeOndeObrig.TipoDescrição / restrições
idcaminho✅ simintegerID do equipamento — mín. 1

Corpo (application/json) — obrigatório

Campos obrigatórios: nome

CampoTipoObrig.Descrição / restrições
nomestring✅

Respostas

DELETE /equipamentos/{id}

Desativar equipamento · Permissão: equipamento:delete

É uma desativação (ativo = false), não uma exclusão física.

Parâmetros

NomeOndeObrig.TipoDescrição / restrições
idcaminho✅ simintegerID do equipamento — mín. 1

Respostas

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

NomeOndeObrig.TipoDescrição / restrições
pagequerynãointegerpadrão 1; mín. 1
pageSizequerynãointegerpadrão 50; mín. 1; máx. 200
ativoquerynãobooleanSem informar, lista ativos e inativos.
nomequerynãostringFiltro por nome (contém, sem diferenciar maiúsculas)

Respostas

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)
CampoTipoObrig.Descrição / restrições
nomestring✅
descricaostring✅
codigostringaceita null
codigoTUSSstringaceita null
valornumberEm reais (não em centavos).
tempoServiconumberDuração em minutos — aceita null
somarItemsbooleanSe true, o valor é calculado somando os itens vinculados em vez do valor informado. — padrão False
linkAuxiliarstringaceita null
preparamentosstringaceita null
preparostringaceita null
tipoServicoIdintegeraceita null
tipoCodigoIdintegeraceita null
tipoGuiaIdintegeraceita null
tabelaANS87IDintegeraceita null
regimeDeAtendimentoIdintegeraceita null
tipoAtendimentointegerID do tipo de atendimento — aceita null
especialidadesIdarray<integer>
documentosarray<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[].idinteger✅ID do documento
perfilFiscalIdstringPerfil fiscal (NFS-e) do serviço. null desvincula; omitido mantém (no PUT). — aceita null
produtoIdsarray<object>ID do produto (quantidade 1) ou objeto com quantidade/valor.
equipamentoIdsarray<object>
servicosRelacionadosarray<object>Serviços que compõem este serviço: ID (quantidade 1) ou objeto com quantidade.
servicoTaxaarray<object>Taxas vinculadas ao serviço.
servicoTaxa[].taxaIdinteger✅
servicoTaxa[].quantidadenumberpadrão 1
habilitarAgendamentoOnlinebooleanpadrão False
apenasComColaboradorDesignadobooleanpadrão False

Respostas

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).

CampoTipoObrig.Descrição / restrições
servicosarray<object>✅máx. itens 50

Respostas

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

NomeOndeObrig.TipoDescrição / restrições
idcaminho✅ simintegerID do serviço — mín. 1

Respostas

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.

Ex.: { "nome": "X" } só renomeia; { "documentos": [{ "id": 3 }] } deixa só o documento 3.

Parâmetros

NomeOndeObrig.TipoDescrição / restrições
idcaminho✅ simintegerID 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)
CampoTipoObrig.Descrição / restrições
nomestring✅
descricaostring✅
codigostringaceita null
codigoTUSSstringaceita null
valornumberEm reais (não em centavos).
tempoServiconumberDuração em minutos — aceita null
somarItemsbooleanSe true, o valor é calculado somando os itens vinculados em vez do valor informado. — padrão False
linkAuxiliarstringaceita null
preparamentosstringaceita null
preparostringaceita null
tipoServicoIdintegeraceita null
tipoCodigoIdintegeraceita null
tipoGuiaIdintegeraceita null
tabelaANS87IDintegeraceita null
regimeDeAtendimentoIdintegeraceita null
tipoAtendimentointegerID do tipo de atendimento — aceita null
especialidadesIdarray<integer>
documentosarray<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[].idinteger✅ID do documento
perfilFiscalIdstringPerfil fiscal (NFS-e) do serviço. null desvincula; omitido mantém (no PUT). — aceita null
produtoIdsarray<object>ID do produto (quantidade 1) ou objeto com quantidade/valor.
equipamentoIdsarray<object>
servicosRelacionadosarray<object>Serviços que compõem este serviço: ID (quantidade 1) ou objeto com quantidade.
servicoTaxaarray<object>Taxas vinculadas ao serviço.
servicoTaxa[].taxaIdinteger✅
servicoTaxa[].quantidadenumberpadrão 1
habilitarAgendamentoOnlinebooleanpadrão False
apenasComColaboradorDesignadobooleanpadrão False

Respostas

DELETE /servicos/{id}

Desativar serviço · Permissão: servico:delete

É uma desativação (ativo = false), não uma exclusão física.

Parâmetros

NomeOndeObrig.TipoDescrição / restrições
idcaminho✅ simintegerID do serviço — mín. 1

Respostas

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

NomeOndeObrig.TipoDescrição / restrições
pagequerynãointegerpadrão 1; mín. 1
pageSizequerynãointegerpadrão 50; mín. 1; máx. 200
ativoquerynãobooleanSem informar, lista ativos e inativos.

Respostas

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)
CampoTipoObrig.Descrição / restrições
nomestring✅
cpfstring✅
dataDeNascimentostring (date)✅
sexoIdinteger✅
telefonestring✅
telefone2stringaceita null
celularstring✅
celular2stringaceita null
emailstring✅
email2stringaceita null
mensagemstringaceita null
corNaAgendastringaceita null
empresasarray<integer>IDs das empresas/unidades onde o colaborador atua
enderecoobject✅
endereco.cepstring✅
endereco.enderecostring✅
endereco.numerostring✅
endereco.complementostringaceita null
endereco.bairrostring✅
endereco.cidadestring✅
endereco.unidadeFederativastring✅Nome por extenso da UF, não a sigla
conselhoarray<object>
conselho[].ufinteger✅ID da Unidade Federativa
conselho[].descricaostring✅
conselho[].registroConselhostring✅
especialidadesarray<object>
especialidades[].rqestringaceita null
especialidades[].ufinteger✅ID da Unidade Federativa
especialidades[].numeroConselhostring✅
especialidades[].especialidadeIdstring✅
especialidades[].idadeMinimaAtendimentointegeraceita null
especialidades[].idadeMaximaAtendimentointegeraceita null
especialidades[].anamnesePadraostringaceita null
especialidades[].evolucaoPadraostringaceita null
especialidades[].observacoesstringaceita null
especialidades[].conselhoProfissionalIdinteger✅
vinculoRepasseobjectRegras 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.tipoVinculostring
vinculoRepasse.produtosarray<object>
vinculoRepasse.produtos[].valorPercentualnumber✅
vinculoRepasse.produtos[].valorMonetarionumber✅
vinculoRepasse.produtos[].tipoCalculostring✅
vinculoRepasse.produtos[].tipoProdutointeger
vinculoRepasse.produtos[].materialinteger
vinculoRepasse.produtos[].produtointegerProduto da linha; vazio = todos os produtos (linha geral). — aceita null
vinculoRepasse.servicosarray<object>
vinculoRepasse.servicos[].valorPercentualnumber✅
vinculoRepasse.servicos[].valorMonetarionumber✅
vinculoRepasse.servicos[].tipoCalculostring✅
vinculoRepasse.servicos[].servicointegerServiço da linha; vazio = todos os serviços (linha geral). — aceita null
vinculoRepasse.taxasarray<object>
vinculoRepasse.taxas[].valorPercentualnumber✅
vinculoRepasse.taxas[].valorMonetarionumber✅
vinculoRepasse.taxas[].tipoCalculostring✅
vinculoRepasse.taxas[].taxaintegerTaxa da linha; vazio = todas as taxas (linha geral). — aceita null

Respostas

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).

CampoTipoObrig.Descrição / restrições
colaboradoresarray<object>✅máx. itens 50

Respostas

GET /colaboradores/{id}

Consultar colaborador · Permissão: colaborador:read

Parâmetros

NomeOndeObrig.TipoDescrição / restrições
idcaminho✅ simintegerID do colaborador — mín. 1

Respostas

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).

Parâmetros

NomeOndeObrig.TipoDescrição / restrições
idcaminho✅ simintegerID 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)
CampoTipoObrig.Descrição / restrições
nomestring✅
cpfstring✅
dataDeNascimentostring (date)✅
sexoIdinteger✅
telefonestring✅
telefone2stringaceita null
celularstring✅
celular2stringaceita null
emailstring✅
email2stringaceita null
mensagemstringaceita null
corNaAgendastringaceita null
empresasarray<integer>IDs das empresas/unidades onde o colaborador atua
enderecoobject✅
endereco.cepstring✅
endereco.enderecostring✅
endereco.numerostring✅
endereco.complementostringaceita null
endereco.bairrostring✅
endereco.cidadestring✅
endereco.unidadeFederativastring✅Nome por extenso da UF, não a sigla
conselhoarray<object>
conselho[].ufinteger✅ID da Unidade Federativa
conselho[].descricaostring✅
conselho[].registroConselhostring✅
especialidadesarray<object>
especialidades[].rqestringaceita null
especialidades[].ufinteger✅ID da Unidade Federativa
especialidades[].numeroConselhostring✅
especialidades[].especialidadeIdstring✅
especialidades[].idadeMinimaAtendimentointegeraceita null
especialidades[].idadeMaximaAtendimentointegeraceita null
especialidades[].anamnesePadraostringaceita null
especialidades[].evolucaoPadraostringaceita null
especialidades[].observacoesstringaceita null
especialidades[].conselhoProfissionalIdinteger✅
vinculoRepasseobjectRegras 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.tipoVinculostring
vinculoRepasse.produtosarray<object>
vinculoRepasse.produtos[].valorPercentualnumber✅
vinculoRepasse.produtos[].valorMonetarionumber✅
vinculoRepasse.produtos[].tipoCalculostring✅
vinculoRepasse.produtos[].tipoProdutointeger
vinculoRepasse.produtos[].materialinteger
vinculoRepasse.produtos[].produtointegerProduto da linha; vazio = todos os produtos (linha geral). — aceita null
vinculoRepasse.servicosarray<object>
vinculoRepasse.servicos[].valorPercentualnumber✅
vinculoRepasse.servicos[].valorMonetarionumber✅
vinculoRepasse.servicos[].tipoCalculostring✅
vinculoRepasse.servicos[].servicointegerServiço da linha; vazio = todos os serviços (linha geral). — aceita null
vinculoRepasse.taxasarray<object>
vinculoRepasse.taxas[].valorPercentualnumber✅
vinculoRepasse.taxas[].valorMonetarionumber✅
vinculoRepasse.taxas[].tipoCalculostring✅
vinculoRepasse.taxas[].taxaintegerTaxa da linha; vazio = todas as taxas (linha geral). — aceita null

Respostas

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

NomeOndeObrig.TipoDescrição / restrições
idcaminho✅ simintegerID do colaborador — mín. 1

Respostas

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

NomeOndeObrig.TipoDescrição / restrições
idcaminho✅ simintegerID do colaborador — mín. 1

Corpo (application/json) — obrigatório

Campos obrigatórios: email, senha

CampoTipoObrig.Descrição / restrições
emailstring (email)✅
senhastring✅mín. caracteres 8
primeiroNomestringSem informar, usa a primeira palavra do nome cadastrado. — aceita null
sobrenomestringSem informar, usa o restante do nome cadastrado. — aceita null

Respostas

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

NomeOndeObrig.TipoDescrição / restrições
pagequerynãointegerpadrão 1; mín. 1
pageSizequerynãointegerpadrão 50; mín. 1; máx. 200
colaboradorIdquerynãointeger
localIdquerynãointeger
vigenteEmquerynãostring (date)Só grades vigentes nessa data (entre vigenteDesde e vigenteAte, ou sem vigenteAte).

Respostas

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)
CampoTipoObrig.Descrição / restrições
colaboradorGradearray<object>✅Um ou mais horários — o corpo já aceita lista, então cria vários de uma vez.
colaboradorGrade[].localIdintegeraceita null
colaboradorGrade[].colaboradorIdinteger✅
colaboradorGrade[].inicioAtendimentostring (date-time)✅
colaboradorGrade[].fimAtendimentostring (date-time)✅
colaboradorGrade[].tempoAtendimentointeger✅Duração de cada horário, em minutos
colaboradorGrade[].repetirstring✅Ex.: NAO_REPETIR, SEMANALMENTE
colaboradorGrade[].diasDaSemanastring✅Dias em que a grade se repete
colaboradorGrade[].vigenteDesdestring (date)aceita null
colaboradorGrade[].vigenteAtestring (date)aceita null
colaboradorGrade[].maximoEncaixePorDiainteger
colaboradorGrade[].maximoEncaixePorHorariointeger
colaboradorGrade[].minimoTempoEntreEncaixesinteger
colaboradorGrade[].convenioarray<object>Convênios atendidos nesta grade
colaboradorGrade[].convenio[].idinteger
colaboradorGrade[].convenio[].limiteintegeraceita null
colaboradorGrade[].equipamentoarray<integer>
colaboradorGrade[].especialidadesarray<object>
colaboradorGrade[].especialidades[].idinteger
colaboradorGrade[].servicosarray<object>
colaboradorGrade[].servicos[].idinteger
colaboradorGrade[].agendamentoOnlinebooleanaceita null

Respostas

GET /grades-colaborador/filter

Filtrar grade de colaborador · Permissão: gradeColaborador:read

Parâmetros

NomeOndeObrig.TipoDescrição / restrições
colaboradorIdquerynãointeger
localIdquerynãointeger

Respostas

GET /grades-colaborador/{id}

Consultar horário de grade · Permissão: gradeColaborador:read

Parâmetros

NomeOndeObrig.TipoDescrição / restrições
idcaminho✅ simintegerID da grade — mín. 1

Respostas

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).

Parâmetros

NomeOndeObrig.TipoDescrição / restrições
idcaminho✅ simintegerID 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)
CampoTipoObrig.Descrição / restrições
[].localIdintegeraceita null
[].colaboradorIdinteger✅
[].inicioAtendimentostring (date-time)✅
[].fimAtendimentostring (date-time)✅
[].tempoAtendimentointeger✅Duração de cada horário, em minutos
[].repetirstring✅Ex.: NAO_REPETIR, SEMANALMENTE
[].diasDaSemanastring✅Dias em que a grade se repete
[].vigenteDesdestring (date)aceita null
[].vigenteAtestring (date)aceita null
[].maximoEncaixePorDiainteger
[].maximoEncaixePorHorariointeger
[].minimoTempoEntreEncaixesinteger
[].convenioarray<object>Convênios atendidos nesta grade
[].convenio[].idinteger
[].convenio[].limiteintegeraceita null
[].equipamentoarray<integer>
[].especialidadesarray<object>
[].especialidades[].idinteger
[].servicosarray<object>
[].servicos[].idinteger
[].agendamentoOnlinebooleanaceita null
[].idinteger✅

Respostas

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

NomeOndeObrig.TipoDescrição / restrições
idcaminho✅ simintegerID da grade — mín. 1

Respostas

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

NomeOndeObrig.TipoDescrição / restrições
idcaminho✅ simintegerID da grade — mín. 1

Respostas

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

NomeOndeObrig.TipoDescrição / restrições
pagequerynãointegerpadrão 1; mín. 1
pageSizequerynãointegerpadrão 50; mín. 1; máx. 200
equipamentoIdquerynãointeger
localIdquerynãointeger
vigenteEmquerynãostring (date)Só grades vigentes nessa data (entre vigenteDesde e vigenteAte, ou sem vigenteAte).

Respostas

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

CampoTipoObrig.Descrição / restrições
[].localIdinteger✅
[].equipamentoIdinteger✅
[].repetirbooleanpadrão True
[].diaDaSemanastring✅
[].inicioAtendimentostring (date-time)✅
[].fimAtendimentostring (date-time)✅
[].gradeEmMinutosinteger✅
[].vigenteDesdestring (date)aceita null

Respostas

GET /grades-equipamento/{id}

Consultar horário de grade · Permissão: gradeEquipamento:read

Parâmetros

NomeOndeObrig.TipoDescrição / restrições
idcaminho✅ simintegerID da grade — mín. 1

Respostas

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).

Parâmetros

NomeOndeObrig.TipoDescrição / restrições
idcaminho✅ simintegerID da grade — mín. 1

Corpo (application/json) — obrigatório

Campos obrigatórios: localId, equipamentoId, diaDaSemana, inicioAtendimento, fimAtendimento, gradeEmMinutos

CampoTipoObrig.Descrição / restrições
localIdinteger✅
equipamentoIdinteger✅
repetirbooleanpadrão True
diaDaSemanastring✅
inicioAtendimentostring (date-time)✅
fimAtendimentostring (date-time)✅
gradeEmMinutosinteger✅
vigenteDesdestring (date)aceita null

Respostas

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

NomeOndeObrig.TipoDescrição / restrições
idcaminho✅ simintegerID da grade — mín. 1

Respostas

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

NomeOndeObrig.TipoDescrição / restrições
pagequerynãointegerpadrão 1; mín. 1
pageSizequerynãointegerpadrão 50; mín. 1; máx. 200
ativoquerynãobooleanSem informar, lista ativos e inativos.

Respostas

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)
CampoTipoObrig.Descrição / restrições
nomeFantasiastring
razaoSocialstring
cnpjstringÚnico por clínica
descricaostring✅
codigointeger
telefonestring
emailstring
pessoaDeContatostring
observacaostring
dataIniciostring (date-time)✅
dataFimstring (date-time)aceita null
dataReajustestring (date-time)aceita null
dataRenovacaostring (date-time)aceita null
prazoRecursoGlosainteger
prazoPagamentoRecursoGlosainteger
prazoReajusteinteger
prazoAutorizacaointeger
prazoPagamentointeger
prazoRetornointeger
prazoLimiteEntregaGuiasinteger
limiteParcelasConvenioParticularinteger
fatorKnumber
faturadoPagamentoboolean
exigirTokenboolean
operadoraIdstringID da operadora
empresaIdstring✅ID da empresa dona do convênio ("Empresa Principal" na tela do sistema).
unidadesIdsarray<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.
kitDocumentosPadraoobject
kitDocumentosPadrao.idinteger
xmlConsultaIdinteger
xmlSpSadtIdinteger
politicasPorTipoProdutoarray<object>
politicasPorTipoProduto[].tipoProdutoIdinteger✅
politicasPorTipoProduto[].fatorKstring✅Percentual. Aceita vírgula ou ponto.
politicasPorTipoProduto[].idJsonstring✅JSON serializado com fontePrecoId e tipoPrecificacao
registroANSstringRegistro ANS do convênio. Na criação, é este campo que é gravado como código ANS — codigoANS é ignorado.

Respostas

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

Como interpretar a resposta

Limites

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)
CampoTipoObrig.Descrição / restrições
conveniosarray<object>✅máx. itens 50; mín. itens 1
convenios[].nomeFantasiastring
convenios[].razaoSocialstring
convenios[].cnpjstring✅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[].descricaostring✅
convenios[].codigointeger
convenios[].telefonestring
convenios[].emailstring
convenios[].pessoaDeContatostring
convenios[].observacaostring
convenios[].dataIniciostring (date-time)✅
convenios[].dataFimstring (date-time)aceita null
convenios[].dataReajustestring (date-time)aceita null
convenios[].dataRenovacaostring (date-time)aceita null
convenios[].prazoRecursoGlosainteger
convenios[].prazoPagamentoRecursoGlosainteger
convenios[].prazoReajusteinteger
convenios[].prazoAutorizacaointeger
convenios[].prazoPagamentointeger
convenios[].prazoRetornointeger
convenios[].prazoLimiteEntregaGuiasinteger
convenios[].limiteParcelasConvenioParticularinteger
convenios[].fatorKnumber
convenios[].faturadoPagamentoboolean
convenios[].exigirTokenboolean
convenios[].operadoraIdstringID da operadora
convenios[].empresaIdstring✅ID da empresa dona do convênio ("Empresa Principal" na tela do sistema).
convenios[].unidadesIdsarray<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[].kitDocumentosPadraoobject
convenios[].kitDocumentosPadrao.idinteger
convenios[].xmlConsultaIdinteger
convenios[].xmlSpSadtIdinteger
convenios[].politicasPorTipoProdutoarray<object>
convenios[].politicasPorTipoProduto[].tipoProdutoIdinteger✅
convenios[].politicasPorTipoProduto[].fatorKstring✅Percentual. Aceita vírgula ou ponto.
convenios[].politicasPorTipoProduto[].idJsonstring✅JSON serializado com fontePrecoId e tipoPrecificacao
convenios[].registroANSstringRegistro ANS do convênio. Na criação, é este campo que é gravado como código ANS — codigoANS é ignorado.

Respostas

GET /convenios/{id}/colaboradores

Listar colaboradores do convênio · Permissão: convenio:read

Parâmetros

NomeOndeObrig.TipoDescrição / restrições
idcaminho✅ simintegerID do convênio — mín. 1
pagequerynãointegerpadrão 1; mín. 1
pageSizequerynãointegerpadrão 50; mín. 1; máx. 200

Respostas

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)

Regras (as mesmas da tela)

Como interpretar a resposta

Limites

Parâmetros

NomeOndeObrig.TipoDescrição / restrições
idcaminho✅ simintegerID do convênio — mín. 1

Corpo (application/json) — obrigatório

Campos obrigatórios: colaboradores, colaboradores[].colaboradorId

CampoTipoObrig.Descrição / restrições
colaboradoresarray<object>✅máx. itens 100; mín. itens 1
colaboradores[].colaboradorIdinteger✅ID do colaborador
colaboradores[].credenciadobooleanColuna Credenciado da tela. Omitido: mantém o valor atual (ou false se o vínculo for novo).
colaboradores[].atendebooleanColuna Atende da tela. Só pode ser true se o colaborador for credenciado ou tiver conversão. Omitido: mantém o valor atual.
colaboradores[].colaboradorConvertidoIdintegerColuna Conversão da tela: colaborador que atende no lugar deste para o convênio.
colaboradores[].especialidadesIdsarray<integer>Coluna Especialidade da tela: IDs de especialidades cadastradas neste colaborador (colaborador_especialidade, ativas). — máx. itens 50
colaboradores[].especialidadesConvertidasIdsarray<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

GET /convenios/{id}/taxas

Listar taxas do convênio · Permissão: convenio:read

Parâmetros

NomeOndeObrig.TipoDescrição / restrições
idcaminho✅ simintegerID do convênio — mín. 1
pagequerynãointegerpadrão 1; mín. 1
pageSizequerynãointegerpadrão 50; mín. 1; máx. 200

Respostas

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)

Como interpretar a resposta

Limites

Parâmetros

NomeOndeObrig.TipoDescrição / restrições
idcaminho✅ simintegerID do convênio — mín. 1

Corpo (application/json) — obrigatório

Campos obrigatórios: taxas, taxas[].taxaId

Todos os campos do corpo (13)
CampoTipoObrig.Descrição / restrições
taxasarray<object>✅máx. itens 200; mín. itens 1
taxas[].taxaIdinteger✅ID da taxa cadastrada no sistema (coluna Taxa da tela)
taxas[].utilizabooleanColuna Utiliza. Omitido: mantém o valor atual (ou false se o vínculo for novo).
taxas[].zerarValorbooleanColuna Zerar Valor. Omitido: mantém o valor atual.
taxas[].nomeConvertidostring
taxas[].descricaoConvertidastring
taxas[].valorConvertidonumberEm reais (ex.: 50 = R$ 50,00). null limpa o valor convertido. Omitido: mantém o valor atual. — aceita null
taxas[].tipoCodigoIdinteger
taxas[].tipoTaxaIdinteger
taxas[].tabela87ANSIdinteger
taxas[].codigostring
taxas[].codigoTabelaConversaostring
taxas[].descricaoConversaoTabelastring

Respostas

GET /convenios/{id}/servicos

Listar serviços do convênio · Permissão: convenio:read

Parâmetros

NomeOndeObrig.TipoDescrição / restrições
idcaminho✅ simintegerID do convênio — mín. 1
pagequerynãointegerpadrão 1; mín. 1
pageSizequerynãointegerpadrão 50; mín. 1; máx. 200

Respostas

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)

Como interpretar a resposta

Limites

Parâmetros

NomeOndeObrig.TipoDescrição / restrições
idcaminho✅ simintegerID do convênio — mín. 1

Corpo (application/json) — obrigatório

Campos obrigatórios: servicos, servicos[].servicoId

Todos os campos do corpo (19)
CampoTipoObrig.Descrição / restrições
servicosarray<object>✅máx. itens 200; mín. itens 1
servicos[].servicoIdinteger✅ID do serviço cadastrado no sistema (coluna Serviço da tela)
servicos[].utilizabooleanColuna Utiliza. Omitido: mantém o valor atual (ou false se o vínculo for novo).
servicos[].zerarValorboolean
servicos[].pacoteboolean
servicos[].autorizacaoPreviaboolean
servicos[].retornoServicoboolean
servicos[].ativoboolean
servicos[].nomeConversaostring
servicos[].descricaoConveniostring
servicos[].valorInternoConvenionumberEm reais. null limpa o valor. Omitido: mantém o valor atual. — aceita null
servicos[].parcelasMaximasinteger
servicos[].tipoCodigoIdinteger
servicos[].tipoAtendimentoIdintegeraceita null
servicos[].tabela87ANSIdinteger
servicos[].kitDocumentoIdinteger
servicos[].codigostring
servicos[].codigoTussstring
servicos[].codigoConveniostring

Respostas

GET /convenios/{id}/produtos

Listar produtos do convênio · Permissão: convenio:read

Parâmetros

NomeOndeObrig.TipoDescrição / restrições
idcaminho✅ simintegerID do convênio — mín. 1
pagequerynãointegerpadrão 1; mín. 1
pageSizequerynãointegerpadrão 50; mín. 1; máx. 200

Respostas

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)

Como interpretar a resposta

Limites

Parâmetros

NomeOndeObrig.TipoDescrição / restrições
idcaminho✅ simintegerID do convênio — mín. 1

Corpo (application/json) — obrigatório

Campos obrigatórios: produtos, produtos[].produtoId

Todos os campos do corpo (17)
CampoTipoObrig.Descrição / restrições
produtosarray<object>✅máx. itens 200; mín. itens 1
produtos[].produtoIdinteger✅ID do produto cadastrado no sistema (coluna Produto da tela)
produtos[].utilizabooleanColuna Utiliza. Omitido: mantém o valor atual (ou false se o vínculo for novo).
produtos[].zerarValorbooleanColuna Zerar Valor.
produtos[].nomeConversaostring
produtos[].descricaoConversaostring
produtos[].valorUnitarioConversaonumberValor unitário em reais. null limpa o valor. Omitido: mantém o valor atual. — aceita null
produtos[].fatorKstringPercentual do fatorK/inflator/deflator. Aceita vírgula ou ponto. null limpa. — aceita null
produtos[].parcelasMaximasinteger
produtos[].tipoCodigoIdintegeraceita null
produtos[].tabela87ANSIdintegeraceita null
produtos[].fontePrecoCompraOptionsIdintegerFonte de preço de compra usada na política de preço.
produtos[].tipoPrecificacaostringvalores: PRECO_1, PRECO_2, PRECO_3
produtos[].codigostring
produtos[].codigoTussstring
produtos[].codigoTissstring
produtos[].codigoConversaostring

Respostas

GET /convenios/{id}/especialidades

Listar especialidades do convênio · Permissão: convenio:read

Parâmetros

NomeOndeObrig.TipoDescrição / restrições
idcaminho✅ simintegerID do convênio — mín. 1
pagequerynãointegerpadrão 1; mín. 1
pageSizequerynãointegerpadrão 50; mín. 1; máx. 200

Respostas

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)

Como interpretar a resposta

Limites

Parâmetros

NomeOndeObrig.TipoDescrição / restrições
idcaminho✅ simintegerID do convênio — mín. 1

Corpo (application/json) — obrigatório

Campos obrigatórios: especialidades, especialidades[].especialidadeId

CampoTipoObrig.Descrição / restrições
especialidadesarray<object>✅máx. itens 200; mín. itens 1
especialidades[].especialidadeIdinteger✅ID da especialidade cadastrada no sistema (coluna Especialidade da tela)
especialidades[].utilizabooleanColuna Atende. Omitido: mantém o valor atual (ou false se o vínculo for novo).
especialidades[].dataIniciostring (date-time)aceita null
especialidades[].dataFimstring (date-time)aceita null

Respostas

GET /convenios/{id}/planos

Listar planos do convênio · Permissão: convenio:read

Parâmetros

NomeOndeObrig.TipoDescrição / restrições
idcaminho✅ simintegerID do convênio — mín. 1
pagequerynãointegerpadrão 1; mín. 1
pageSizequerynãointegerpadrão 50; mín. 1; máx. 200

Respostas

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)

Como interpretar a resposta

Limites

Parâmetros

NomeOndeObrig.TipoDescrição / restrições
idcaminho✅ simintegerID do convênio — mín. 1

Corpo (application/json) — obrigatório

Campos obrigatórios: planos, planos[].planoId

CampoTipoObrig.Descrição / restrições
planosarray<object>✅máx. itens 200; mín. itens 1
planos[].planoIdinteger✅ID do plano cadastrado no sistema (coluna Plano da tela)
planos[].utilizabooleanColuna Atende. Omitido: mantém o valor atual (ou false se o vínculo for novo).

Respostas

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

NomeOndeObrig.TipoDescrição / restrições
idcaminho✅ simintegerID do convênio — mín. 1
pagequerynãointegerpadrão 1; mín. 1
pageSizequerynãointegerpadrão 50; mín. 1; máx. 200
produtoquerynãostring
codigoquerynãostring
farolquerynãostringLista separada por vírgula
ativoNoConvenioquerynãoboolean
produtoAtivoquerynãoboolean
searchquerynãostring
sortByquerynãostring
sortOrderquerynãostringvalores: asc, desc

Respostas

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

NomeOndeObrig.TipoDescrição / restrições
idcaminho✅ simintegerID do convênio — mín. 1
pagequerynãointegerpadrão 1; mín. 1
pageSizequerynãointegerpadrão 50; mín. 1; máx. 200
servicoquerynãostring
codigoquerynãostring
farolquerynãostringLista separada por vírgula
ativoNoConvenioquerynãoboolean
servicoAtivoquerynãoboolean
searchquerynãostring
sortByquerynãostring
sortOrderquerynãostringvalores: asc, desc

Respostas

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

NomeOndeObrig.TipoDescrição / restrições
idcaminho✅ simintegerID do convênio — mín. 1
pagequerynãointegerpadrão 1; mín. 1
pageSizequerynãointegerpadrão 50; mín. 1; máx. 200
servicoRaizIdquerynãointeger
itemTipoquerynãostring
itemNomequerynãostring
searchquerynãostring
apenasAtivosNoConvenioquerynãobooleanRestringe aos serviços contratados pelo convênio (vínculo utiliza) — não confundir com servicoAtivo.
servicoAtivoquerynãobooleanFiltra pelo cadastro do serviço raiz estar ativo/inativo (servico.ativo), igual a produtoAtivo em /farol/produtos e servicoAtivo em /farol/servicos.

Respostas

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

NomeOndeObrig.TipoDescrição / restrições
idcaminho✅ simintegerID do convênio — mín. 1
servicoRaizIdcaminho✅ siminteger

Respostas

GET /convenios/{id}

Consultar convênio · Permissão: convenio:read

Parâmetros

NomeOndeObrig.TipoDescrição / restrições
idcaminho✅ simintegerID do convênio — mín. 1

Respostas

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.

Parâmetros

NomeOndeObrig.TipoDescrição / restrições
idcaminho✅ simintegerID 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)
CampoTipoObrig.Descrição / restrições
nomeFantasiastring
razaoSocialstring
cnpjstringÚnico por clínica
descricaostring✅
codigointeger
telefonestring
emailstring
pessoaDeContatostring
observacaostring
dataIniciostring (date-time)✅
dataFimstring (date-time)aceita null
dataReajustestring (date-time)aceita null
dataRenovacaostring (date-time)aceita null
prazoRecursoGlosainteger
prazoPagamentoRecursoGlosainteger
prazoReajusteinteger
prazoAutorizacaointeger
prazoPagamentointeger
prazoRetornointeger
prazoLimiteEntregaGuiasinteger
limiteParcelasConvenioParticularinteger
fatorKnumber
faturadoPagamentoboolean
exigirTokenboolean
operadoraIdstringID da operadora
empresaIdstring✅ID da empresa dona do convênio ("Empresa Principal" na tela do sistema).
unidadesIdsarray<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.
kitDocumentosPadraoobject
kitDocumentosPadrao.idinteger
xmlConsultaIdinteger
xmlSpSadtIdinteger
politicasPorTipoProdutoarray<object>
politicasPorTipoProduto[].tipoProdutoIdinteger✅
politicasPorTipoProduto[].fatorKstring✅Percentual. Aceita vírgula ou ponto.
politicasPorTipoProduto[].idJsonstring✅JSON serializado com fontePrecoId e tipoPrecificacao
codigoANSstringCódigo/registro ANS. Na atualização, o nome do campo é codigoANS.

Respostas

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

NomeOndeObrig.TipoDescrição / restrições
idcaminho✅ simintegerID do convênio — mín. 1

Respostas

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

POST /tabelas-preco

Cadastrar tabela de preço · Permissão: tabelaPreco:create

Corpo (application/json) — obrigatório

Campos obrigatórios: name, priceType1

CampoTipoObrig.Descrição / restrições
namestring✅
descriptionstringaceita null
priceType1string✅
priceType2stringaceita null
priceType3stringaceita null

Respostas

GET /tabelas-preco/{id}

Consultar tabela de preço · Permissão: tabelaPreco:read

Parâmetros

NomeOndeObrig.TipoDescrição / restrições
idcaminho✅ simintegerID do registro desta rota (o Swagger publicado rotula como "ID do convênio" por engano de rótulo) — mín. 1

Respostas

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

NomeOndeObrig.TipoDescrição / restrições
idcaminho✅ simintegerID 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

CampoTipoObrig.Descrição / restrições
namestring✅
descriptionstringaceita null
priceType1string✅
priceType2stringaceita null
priceType3stringaceita null

Respostas

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

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

NomeOndeObrig.TipoDescrição / restrições
idquerynãointegerID da tabela de preço
pagequerynãointegerpadrão 1; mín. 1
pageSizequerynãointegerpadrão 50; mín. 1; máx. 200

Respostas

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

CampoTipoObrig.Descrição / restrições
purchasePriceSourceIdinteger✅ID da tabela de preço
productIdinteger✅
parcelas_maximasintegeraceita null
productCodestringaceita null
productCodeTypeIdintegeraceita null
priceType1numberEm reais (ex.: 19547.56 = R$ 19.547,56). Gravado em centavos. Omitido mantém; null limpa. — aceita null
priceType2numberEm reais. Mesmas regras de priceType1. — aceita null
priceType3numberEm reais. Mesmas regras de priceType1. — aceita null

Respostas

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).

CampoTipoObrig.Descrição / restrições
precosarray<object>✅máx. itens 200

Respostas

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

NomeOndeObrig.TipoDescrição / restrições
pagequerynãointegerpadrão 1; mín. 1
pageSizequerynãointegerpadrão 50; mín. 1; máx. 200
ativoquerynãobooleanSem informar, lista ativos e inativos.

Respostas

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)
CampoTipoObrig.Descrição / restrições
nomestring✅Nome civil (oficial)
nomeSocialstringNome 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
rgstringaceita null
cpfstringObrigatório, salvo para recém-nascido sem CPF (usar cpfMae)
orgaoEmissorstringaceita null
ufRgstringaceita null
dataDeNascimentostring (date)
sexoIdinteger✅
estrangeirobooleanpadrão False
estadoCivilstringaceita null
profissaostringaceita null
atendimentoRnbooleanAtendimento de recém-nascido — dispensa CPF próprio se cpfMae for informado — padrão False
cpfMaestringaceita null
contatoarray<object>✅mín. itens 1
contato[].pessoaDeContatostringaceita null
contato[].emailstring✅
contato[].celularstring✅
contato[].telefonestringaceita null
enderecoobject✅
endereco.cepstring
endereco.enderecostring
endereco.numerostring
endereco.complementostringaceita null
endereco.bairrostring
endereco.cidadestring
endereco.unidadeFederativaIdintegeraceita null
convenioPlanoarray<object>
convenioPlano[].convenioIdinteger✅
convenioPlano[].planoIdintegeraceita null
convenioPlano[].numeroDaCarterinhastringaceita null
convenioPlano[].validadestring (date)aceita null
convenioPlano[].ativobooleanpadrão True

Respostas

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).

CampoTipoObrig.Descrição / restrições
pacientesarray<object>✅máx. itens 50

Respostas

GET /pacientes/{id}

Consultar paciente · Permissão: paciente:read

Parâmetros

NomeOndeObrig.TipoDescrição / restrições
idcaminho✅ simintegerID do paciente — mín. 1

Respostas

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).

Parâmetros

NomeOndeObrig.TipoDescrição / restrições
idcaminho✅ simintegerID 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)
CampoTipoObrig.Descrição / restrições
nomestring✅Nome civil (oficial)
nomeSocialstringNome 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
rgstringaceita null
cpfstringObrigatório, salvo para recém-nascido sem CPF (usar cpfMae)
orgaoEmissorstringaceita null
ufRgstringaceita null
dataDeNascimentostring (date)
sexoIdinteger✅
estrangeirobooleanpadrão False
estadoCivilstringaceita null
profissaostringaceita null
atendimentoRnbooleanAtendimento de recém-nascido — dispensa CPF próprio se cpfMae for informado — padrão False
cpfMaestringaceita null
contatoarray<object>✅mín. itens 1
contato[].pessoaDeContatostringaceita null
contato[].emailstring✅
contato[].celularstring✅
contato[].telefonestringaceita null
enderecoobject✅
endereco.cepstring
endereco.enderecostring
endereco.numerostring
endereco.complementostringaceita null
endereco.bairrostring
endereco.cidadestring
endereco.unidadeFederativaIdintegeraceita null
convenioPlanoarray<object>
convenioPlano[].convenioIdinteger✅
convenioPlano[].planoIdintegeraceita null
convenioPlano[].numeroDaCarterinhastringaceita null
convenioPlano[].validadestring (date)aceita null
convenioPlano[].ativobooleanpadrão True

Respostas

DELETE /pacientes/{id}

Desativar paciente · Permissão: paciente:delete

É uma desativação (ativo = false), não uma exclusão física.

Parâmetros

NomeOndeObrig.TipoDescrição / restrições
idcaminho✅ simintegerID do paciente — mín. 1

Respostas

GET /pacientes/{id}/convenios

Listar convênios/planos vinculados ao paciente · Permissão: paciente:read

Parâmetros

NomeOndeObrig.TipoDescrição / restrições
idcaminho✅ simintegerID do paciente — mín. 1
pagequerynãointegerpadrão 1; mín. 1
pageSizequerynãointegerpadrão 50; mín. 1; máx. 200

Respostas

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

NomeOndeObrig.TipoDescrição / restrições
idcaminho✅ simintegerID do paciente — mín. 1

Corpo (application/json) — obrigatório

Campos obrigatórios: convenioPlano, convenioPlano[].convenioId

CampoTipoObrig.Descrição / restrições
convenioPlanoarray<object>✅mín. itens 1
convenioPlano[].convenioIdinteger✅
convenioPlano[].planoIdintegeraceita null
convenioPlano[].numeroDaCarterinhastringaceita null
convenioPlano[].validadestring (date)aceita null
convenioPlano[].ativobooleanpadrão True

Respostas

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

NomeOndeObrig.TipoDescrição / restrições
idcaminho✅ simintegerID do paciente — mín. 1
vinculoIdcaminho✅ simintegerID 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

CampoTipoObrig.Descrição / restrições
convenioIdinteger✅
planoIdintegeraceita null
numeroDaCarterinhastringaceita null
validadestring (date)aceita null

Respostas

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

NomeOndeObrig.TipoDescrição / restrições
idcaminho✅ simintegerID do paciente — mín. 1

Respostas

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

NomeOndeObrig.TipoDescrição / restrições
idcaminho✅ simintegerID do paciente — mín. 1

Corpo (multipart/form-data) — obrigatório

Campos obrigatórios: file

CampoTipoObrig.Descrição / restrições
filearray<string>✅
tipoAnexoIdintegeraceita null

Respostas

Continue por aqui: Visão geral e autenticação · Implantação pela API · Erros e boas práticas