Pré-requisito de Licença
Para finalizar um procedimento de agendamento pela API, a clínica deve ter a licença do AgendamentoWeb disponível.
Caso essa licença não esteja habilitada, entre em contato com o comercial da Medware ou com o responsável da clínica antes de seguir com a integração.
Configurações Internas no Clínicas
Para os valores aparecerem na API, algumas configurações devem ser feitas no módulo de bibliotecas do Clínicas, software desktop da Medware.
Agenda e Horários
No módulo Manutenção de Agendas, selecione a agenda que deve ter disponibilidade online. Na janela aberta, na seção Dados, marque a opção Agendamento Web.
Na seção Horários, use a opção Configurar Horário Web e selecione os horários que devem ficar disponíveis.
Médicos
No módulo Manutenção de Médicos, selecione o médico que deve ficar disponível para Agendamento Web. Na janela aberta, na seção Dados, marque a opção Agendamento Web.
Operadora e Plano
No módulo Manutenção de Operadoras, selecione a operadora do plano que deve ficar disponível no Agendamento Web. Acesse a seção Plano, selecione o plano de interesse e, na janela aberta, marque a opção Agendamento Web.
Procedimentos
No módulo Manutenção de Procedimentos, selecione o procedimento que deve ter disponibilidade online. Na janela aberta, na seção Dados, marque a opção Agendamento Web.
Visão Geral do Fluxo
O recurso Agendamento do controller Medware permite que sistemas externos realizem agendamentos de forma integrada. O fluxo completo segue a ordem abaixo — cada passo retorna códigos que serão usados no próximo:
- Autenticação — obter o token principal da API
- Paciente — usar um
codPaciente já existente ou enviar os dados cadastrais no salvar
- Operadora — listar operadoras disponíveis → obter
codOperadora
- Plano — listar planos da operadora → obter
codPlano
- Especialidade — listar especialidades → obter
codEspecialidade
- Unidade — listar unidades compatíveis → obter
codUnidade
- Médico — listar médicos disponíveis → obter
codMedico
- Procedimento — listar procedimentos → obter
codProcedimento
- Horários — listar slots disponíveis → obter
codAgenda e dataHoraAgendada
- Salvar Agendamento — confirmar o agendamento com todos os dados coletados
Importante
Os códigos obrigatórios obtidos nas etapas anteriores devem ser maiores que zero ao salvar. No endpoint /Medware/Agendamento/Salvar, envie codPaciente para paciente já cadastrado ou envie o objeto paciente para criar/identificar o cadastro antes de gravar o agendamento.
Passo 1 — Autenticação
Use o token principal da API. Obtenha-o pelo endpoint de login:
O valor retornado em token deve ser enviado como Bearer no header Authorization em todas as chamadas seguintes.
// Obter token principal
const response = await fetch(`${baseURL}/Acesso/login`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
identificacao: 'SEU_USUARIO',
senha: 'SUA_SENHA',
isHash: true
})
});
const { token } = await response.json();
// Usar em todas as chamadas seguintes:
// Authorization: Bearer {token}
curl -X POST "${baseURL}/Acesso/login" \
-H "Content-Type: application/json" \
-d '{"identificacao":"SEU_USUARIO","senha":"SUA_SENHA"}'
using System.Net.Http.Json;
using var client = new HttpClient { BaseAddress = new Uri(baseURL) };
var response = await client.PostAsJsonAsync("Acesso/login", new {
identificacao = "SEU_USUARIO",
senha = "SUA_SENHA"
});
var result = await response.Content.ReadFromJsonAsync<dynamic>();
string token = result.token;
Token da API
Este fluxo usa o header padrão Authorization com o token principal da API.
Passo 2 — Identificação do Paciente
No fluxo de /Medware/Agendamento/Salvar, há duas opções: enviar somente codPaciente quando o paciente já existir, ou enviar os dados cadastrais no objeto paciente quando for necessário criar/identificar o cadastro.
A consulta abaixo é opcional, útil para localizar o paciente e obter o codPaciente antes de salvar.
const response = await fetch(`${baseURL}/Medware/Paciente/Listar?cpfPaciente=12345678900`, {
headers: { 'Authorization': `Bearer ${token}` }
});
const paciente = await response.json();
curl -X GET "${baseURL}/Medware/Paciente/Listar?cpfPaciente=12345678900" \
-H "Authorization: Bearer SEU_TOKEN"
using var client = new HttpClient { BaseAddress = new Uri(baseURL) };
client.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("Bearer", token);
var paciente = await client.GetFromJsonAsync<dynamic>(
"Medware/Paciente/Listar?cpfPaciente=12345678900");
Se o paciente já existir
Envie o codPaciente na raiz do JSON. Nesse caso, os dados cadastrais do objeto paciente não são obrigatórios.
{
"codPaciente": 1023
}
Se o paciente ainda não existir
Não há um passo separado obrigatório para criar o paciente antes do agendamento. Informe os dados mínimos no objeto paciente ao salvar o agendamento; a API cria o cadastro e retorna o CodPaciente junto com o CodAgendamento.
{
"paciente": {
"nome": "João da Silva",
"dataNascimento": "1990-01-15",
"cpf": "12345678901",
"numeroCelularddd": "11",
"numeroCelular": "987654321",
"email": "joao@email.com",
"sexo": "M"
}
}
Campos mínimos
Para paciente existente, basta codPaciente. Para criação automática no agendamento, preencha pelo menos nome, dataNascimento, cpf, numeroCelularddd e numeroCelular.
Passos 3, 4 e 5 — Operadora, Plano e Especialidade
Liste as opções disponíveis usando os filtros que já possui. Os endpoints aceitam qualquer combinação de parâmetros — todos são opcionais:
const headers = { 'Authorization': `Bearer ${token}` };
const operadoras = await fetch(`${baseURL}/Medware/PlanoOperadora/Listar?codUnidade=1&codEspecialidade=5`, { headers })
.then(r => r.json());
const planos = await fetch(`${baseURL}/Medware/Plano/Listar?codOperadora=2`, { headers })
.then(r => r.json());
const especialidades = await fetch(`${baseURL}/Medware/Especialidade/Listar?codUnidade=1&codMedico=7`, { headers })
.then(r => r.json());
curl -X GET "${baseURL}/Medware/PlanoOperadora/Listar?codUnidade=1&codEspecialidade=5" \
-H "Authorization: Bearer SEU_TOKEN"
curl -X GET "${baseURL}/Medware/Plano/Listar?codOperadora=2" \
-H "Authorization: Bearer SEU_TOKEN"
curl -X GET "${baseURL}/Medware/Especialidade/Listar?codUnidade=1&codMedico=7" \
-H "Authorization: Bearer SEU_TOKEN"
using var client = new HttpClient { BaseAddress = new Uri(baseURL) };
client.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("Bearer", token);
var operadoras = await client.GetFromJsonAsync<dynamic>(
"Medware/PlanoOperadora/Listar?codUnidade=1&codEspecialidade=5");
var planos = await client.GetFromJsonAsync<dynamic>(
"Medware/Plano/Listar?codOperadora=2");
var especialidades = await client.GetFromJsonAsync<dynamic>(
"Medware/Especialidade/Listar?codUnidade=1&codMedico=7");
Passos 6, 7 e 8 — Unidade, Médico e Procedimento
Refine os resultados combinando os códigos já obtidos:
const headers = { 'Authorization': `Bearer ${token}` };
const unidades = await fetch(`${baseURL}/Medware/Unidade/Listar?codPlanoOp=3&codEspecialidade=5`, { headers })
.then(r => r.json());
const medicos = await fetch(`${baseURL}/Medware/Medico/Listar?codUnidade=1&codPlano=3&codEspecialidade=5`, { headers })
.then(r => r.json());
const procedimentos = await fetch(`${baseURL}/Medware/ProcedPlanoOp/Listar?codPlano=3&codEspecialidade=5&codUnidade=1`, { headers })
.then(r => r.json());
curl -X GET "${baseURL}/Medware/Unidade/Listar?codPlanoOp=3&codEspecialidade=5" \
-H "Authorization: Bearer SEU_TOKEN"
curl -X GET "${baseURL}/Medware/Medico/Listar?codUnidade=1&codPlano=3&codEspecialidade=5" \
-H "Authorization: Bearer SEU_TOKEN"
curl -X GET "${baseURL}/Medware/ProcedPlanoOp/Listar?codPlano=3&codEspecialidade=5&codUnidade=1" \
-H "Authorization: Bearer SEU_TOKEN"
using var client = new HttpClient { BaseAddress = new Uri(baseURL) };
client.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("Bearer", token);
var unidades = await client.GetFromJsonAsync<dynamic>(
"Medware/Unidade/Listar?codPlanoOp=3&codEspecialidade=5");
var medicos = await client.GetFromJsonAsync<dynamic>(
"Medware/Medico/Listar?codUnidade=1&codPlano=3&codEspecialidade=5");
var procedimentos = await client.GetFromJsonAsync<dynamic>(
"Medware/ProcedPlanoOp/Listar?codPlano=3&codEspecialidade=5&codUnidade=1");
Passo 9 — Buscar Horários Disponíveis
Com todos os dados definidos, liste os horários disponíveis. dataInicio, dataFim, horaInicio e horaFim são obrigatórios:
const url = `${baseURL}/Medware/Horarios/Listar?codMedico=7&codUnidade=1&codPlano=3&codEspecialidade=5&codProcedimento=15&dataInicio=10/06/2026&dataFim=17/06/2026&horaInicio=07:00:00&horaFim=18:00:00`;
const horarios = await fetch(url, {
headers: { 'Authorization': `Bearer ${token}` }
}).then(r => r.json());
curl -X GET "${baseURL}/Medware/Horarios/Listar?codMedico=7&codUnidade=1&codPlano=3&codEspecialidade=5&codProcedimento=15&dataInicio=10/06/2026&dataFim=17/06/2026&horaInicio=07:00:00&horaFim=18:00:00" \
-H "Authorization: Bearer SEU_TOKEN"
using var client = new HttpClient { BaseAddress = new Uri(baseURL) };
client.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("Bearer", token);
var horarios = await client.GetFromJsonAsync<dynamic>(
"Medware/Horarios/Listar?codMedico=7&codUnidade=1&codPlano=3&codEspecialidade=5&codProcedimento=15&dataInicio=10/06/2026&dataFim=17/06/2026&horaInicio=07:00:00&horaFim=18:00:00");
O retorno inclui o codAgenda e a dataHoraAgendada de cada slot — guarde-os para o próximo passo.
Passo 10 — Salvar o Agendamento
Com todos os dados coletados, confirme o agendamento:
Campos obrigatórios do agendamento (devem ser > 0)
| Campo |
Descrição |
Obtido em |
codAgenda | Código da agenda do horário escolhido | Horarios/Listar |
codMedico | Código do médico selecionado | Medico/Listar |
codProcedimento | Código do procedimento escolhido | ProcedPlanoOp/Listar |
codPlano | Código do plano selecionado | Plano/Listar |
dataHoraAgendada | Data e hora do slot escolhido (yyyy-MM-ddTHH:mm:ss) | Horarios/Listar |
Identificação do paciente (informe uma das opções)
| Campo |
Descrição |
Quando usar |
codPaciente | Código do paciente já cadastrado | Paciente existente. Não exige os dados cadastrais. |
paciente | Dados mínimos do paciente: nome, dataNascimento, cpf, numeroCelularddd e numeroCelular | Paciente novo ou não identificado pelo sistema externo. |
Campos opcionais ou recomendados
| Campo |
Descrição |
codUnidade | Código da unidade selecionada. Quando informado, ajuda a validar a agenda escolhida. |
codEspecialidade | Código da especialidade (recomendado quando disponível) |
Exemplo de envio com paciente existente
const agendamento = {
codAgenda: 142,
codMedico: 7,
codPaciente: 1023,
codProcedimento: 15,
codPlano: 3,
codUnidade: 1,
codEspecialidade: 5,
dataHoraAgendada: "2026-06-10T09:30:00"
};
const resultado = await fetch(`${baseURL}/Medware/Agendamento/Salvar`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${token}`
},
body: JSON.stringify(agendamento)
}).then(r => r.json());
curl -X POST "${baseURL}/Medware/Agendamento/Salvar" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer SEU_TOKEN" \
-d '{"codAgenda":142,"codMedico":7,"codPaciente":1023,"codProcedimento":15,"codPlano":3,"codUnidade":1,"codEspecialidade":5,"dataHoraAgendada":"2026-06-10T09:30:00"}'
using var client = new HttpClient { BaseAddress = new Uri(baseURL) };
client.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("Bearer", token);
var agendamento = new {
codAgenda = 142,
codMedico = 7,
codPaciente = 1023,
codProcedimento = 15,
codPlano = 3,
codUnidade = 1,
codEspecialidade = 5,
dataHoraAgendada = "2026-06-10T09:30:00"
};
var response = await client.PostAsJsonAsync("Medware/Agendamento/Salvar", agendamento);
var resultado = await response.Content.ReadFromJsonAsync<dynamic>();
Exemplo de envio criando/identificando paciente
{
"codAgenda": 142,
"codMedico": 7,
"codProcedimento": 15,
"codPlano": 3,
"codUnidade": 1,
"codEspecialidade": 5,
"dataHoraAgendada": "2026-06-10T09:30:00",
"paciente": {
"nome": "João da Silva",
"dataNascimento": "1990-01-15",
"cpf": "12345678901",
"email": "joao@email.com",
"sexo": "M",
"numeroCelularddd": "11",
"numeroCelular": "987654321"
}
}
Respostas possíveis
| Resultado |
Significado |
"OK, Agendamento concluído." | Sucesso — retorna CodAgendamento e CodPaciente |
"LIMITADO" | Horário bloqueado por restrições de agenda (plano, procedimento ou paciente) |
"ERROR" | Horário não disponível ou dado inválido — verifique a mensagem de erro retornada |
Dicas
- Sempre percorra o fluxo na ordem correta — horários dependem de médico, unidade e plano já definidos
- Nunca envie
0 nos campos obrigatórios: isso indica que o passo anterior não foi concluído
- Use o token principal da API obtido em
/Acesso/login
- Datas nos filtros: formato
dd/MM/yyyy. Data de agendamento ao salvar: formato yyyy-MM-ddTHH:mm:ss