curl --request POST \
--url https://api.controleclinic.com.br/v1/scheduling/appointments \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"patient_id": "8d2f4a71-3c9b-4e6a-b5d0-1f7e2c9a4b36",
"start_at": "2026-11-10T14:00:00-03:00",
"end_at": "2026-11-10T14:30:00-03:00"
}
'const options = {
method: 'POST',
headers: {'X-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
patient_id: '8d2f4a71-3c9b-4e6a-b5d0-1f7e2c9a4b36',
start_at: '2026-11-10T14:00:00-03:00',
end_at: '2026-11-10T14:30:00-03:00'
})
};
fetch('https://api.controleclinic.com.br/v1/scheduling/appointments', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.controleclinic.com.br/v1/scheduling/appointments"
payload = {
"patient_id": "8d2f4a71-3c9b-4e6a-b5d0-1f7e2c9a4b36",
"start_at": "2026-11-10T14:00:00-03:00",
"end_at": "2026-11-10T14:30:00-03:00"
}
headers = {
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text){
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"clinic_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"patient_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"professional_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"procedure_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"start_at": "<string>",
"end_at": "<string>",
"status": "scheduled",
"notes": "<string>",
"room_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"technology_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"session_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"origem": "importacao",
"created_at": "<string>",
"updated_at": "<string>"
}{
"success": false,
"error": null
}{
"error": "<string>"
}{
"error": "Insufficient scope"
}{
"error": "<string>",
"message": "<string>"
}{
"error": "Invalid reference",
"field": "<string>",
"message": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}Criar agendamento
Cria um agendamento. status padrão: scheduled. Datas em ISO 8601 com fuso (2026-11-10T14:00:00-03:00); sem fuso o horário é lido como UTC e aparece 3 horas adiantado na agenda. end_at precisa ser depois de start_at.
O banco recusa sobreposição do mesmo profissional, sala ou tecnologia (exceto cancelled e no_show) com 409. Todo id informado precisa ser da clínica da chave (senão 422).
🔴 Na clínica com o Pix antecipado ligado, confirmed significa “pagou”: mudar para confirmed um agendamento que exige Pix e não pagou devolve 409. Sessão de pacote já vendido, procedimento de valor zero e agendamento criado antes de a opção ser ligada não exigem Pix. Criar já confirmed nessa clínica também devolve 409: crie scheduled.
⚠️ Não use para importar histórico de outro sistema: um completed no passado altera o retorno (recall) do paciente e o agendamento não fica marcado como importado. Para migração, use a Central de Migração.
Escopo: scheduling:write.
curl --request POST \
--url https://api.controleclinic.com.br/v1/scheduling/appointments \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"patient_id": "8d2f4a71-3c9b-4e6a-b5d0-1f7e2c9a4b36",
"start_at": "2026-11-10T14:00:00-03:00",
"end_at": "2026-11-10T14:30:00-03:00"
}
'const options = {
method: 'POST',
headers: {'X-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
patient_id: '8d2f4a71-3c9b-4e6a-b5d0-1f7e2c9a4b36',
start_at: '2026-11-10T14:00:00-03:00',
end_at: '2026-11-10T14:30:00-03:00'
})
};
fetch('https://api.controleclinic.com.br/v1/scheduling/appointments', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.controleclinic.com.br/v1/scheduling/appointments"
payload = {
"patient_id": "8d2f4a71-3c9b-4e6a-b5d0-1f7e2c9a4b36",
"start_at": "2026-11-10T14:00:00-03:00",
"end_at": "2026-11-10T14:30:00-03:00"
}
headers = {
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text){
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"clinic_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"patient_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"professional_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"procedure_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"start_at": "<string>",
"end_at": "<string>",
"status": "scheduled",
"notes": "<string>",
"room_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"technology_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"session_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"origem": "importacao",
"created_at": "<string>",
"updated_at": "<string>"
}{
"success": false,
"error": null
}{
"error": "<string>"
}{
"error": "Insufficient scope"
}{
"error": "<string>",
"message": "<string>"
}{
"error": "Invalid reference",
"field": "<string>",
"message": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}Autorizações
Token de API no formato cc_live_<64 chars hex>. Obtido em Minha Clínica → Integrações.
Corpo
scheduled, confirmed, completed, cancelled, no_show Resposta
Agendamento criado
scheduled, confirmed, completed, cancelled, no_show importacao 