Atendimentos — Quickstart
Em menos de 5 minutos, crie seu primeiro agendamento via API: profissional, serviço e atendimento confirmado.
Licença e configuração
Atendimentos está incluído em toda licença NooviChat válida. Para usar este guia, a conta precisa ter profissionais, serviços e permissões administrativas configurados.
Pré-requisitos
- Token de API válido (
api_access_token) com permissão de administrador - ID da conta (
account_id) — visível na URL do dashboard - Ao menos um contato existente na conta (para vincular ao atendimento)
# Defina as variaveis base
BASE_URL="https://chat.seudominio.com"
ACCOUNT_ID=1
TOKEN="seu_api_access_token"
CONTACT_ID=42 # ID de um contato existentePasso 1 — Criar um profissional
Profissionais são as pessoas que executam os serviços. Cada um tem horários de atendimento configurados por dia da semana.
PROFESSIONAL=$(curl -s -X POST "$BASE_URL/api/v1/accounts/$ACCOUNT_ID/professionals" \
-H "api_access_token: $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"professional": {
"name": "Dra. Ana Lima",
"specialty": "Odontologia Geral",
"color": "#3B82F6",
"buffer_minutes": 10,
"working_hours": {
"mon": [{"start": "08:00", "end": "18:00"}],
"tue": [{"start": "08:00", "end": "18:00"}],
"wed": [{"start": "08:00", "end": "18:00"}],
"thu": [{"start": "08:00", "end": "18:00"}],
"fri": [{"start": "08:00", "end": "13:00"}]
}
}
}')
PROFESSIONAL_ID=$(echo $PROFESSIONAL | jq -r '.data.id')
echo "Profissional criado: ID=$PROFESSIONAL_ID"Passo 2 — Criar um serviço
Serviços definem o que será realizado no atendimento, incluindo duração e preço padrão.
SERVICE=$(curl -s -X POST "$BASE_URL/api/v1/accounts/$ACCOUNT_ID/services" \
-H "api_access_token: $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"service": {
"name": "Consulta Inicial",
"description": "Avaliação e plano de tratamento",
"duration_minutes": 60,
"default_price_cents": 25000,
"currency": "BRL",
"color": "#10B981"
}
}')
SERVICE_ID=$(echo $SERVICE | jq -r '.data.id')
echo "Serviço criado: ID=$SERVICE_ID"Passo 3 — Agendar o atendimento
Com profissional e serviço criados, agende um atendimento vinculando um contato existente. O campo price_cents captura o preço no momento do agendamento (snapshot imutável).
APPOINTMENT=$(curl -s -X POST "$BASE_URL/api/v1/accounts/$ACCOUNT_ID/appointments" \
-H "api_access_token: $TOKEN" \
-H "Content-Type: application/json" \
-d "{
\"appointment\": {
\"contact_id\": $CONTACT_ID,
\"professional_id\": $PROFESSIONAL_ID,
\"service_id\": $SERVICE_ID,
\"scheduled_at\": \"2026-06-15T09:00:00Z\",
\"notes\": \"Paciente com dor no dente 16\"
}
}")
APPOINTMENT_ID=$(echo $APPOINTMENT | jq -r '.data.id')
echo "Atendimento criado: ID=$APPOINTMENT_ID, status=$(echo $APPOINTMENT | jq -r '.data.status')"Conflito de horário
Se o profissional já tem um atendimento no mesmo horário, a API retorna422 Unprocessable Entitycom error: "scheduling_conflict". Use o endpoint de disponibilidade (Passo 5) para evitar conflitos.
Passo 4 — Confirmar o atendimento
Atendimentos criados ficam com status scheduled. Confirme explicitamente para mudar para confirmed.
curl -s -X POST "$BASE_URL/api/v1/accounts/$ACCOUNT_ID/appointments/$APPOINTMENT_ID/confirm" \
-H "api_access_token: $TOKEN" | jq '.data.status'
# => "confirmed"Passo 5 — Consultar disponibilidade antes de agendar
Use o endpoint de disponibilidade para listar os slots livres de um profissional em uma data específica. O campo service_id é opcional — quando fornecido, os slots são calculados com base na duração do serviço.
curl -s "$BASE_URL/api/v1/accounts/$ACCOUNT_ID/professionals/$PROFESSIONAL_ID/availability?date=2026-06-15&service_id=$SERVICE_ID" \
-H "api_access_token: $TOKEN" | jq '.data.slots[] | select(.available == true) | .start'Resposta (slots disponíveis):
"2026-06-15T08:00:00Z" "2026-06-15T10:00:00Z" "2026-06-15T11:00:00Z"