Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.mivicall.com/llms.txt

Use this file to discover all available pages before exploring further.

Appointments

appointment.created

Criada uma nova marcação (qualquer source — AI, manual, self-service, sync).
{
  "type": "appointment.created",
  "data": {
    "appointment": {
      "id": "uuid-...",
      "professionalId": "uuid-...",
      "serviceTypeId": "uuid-...",
      "patientName": "Maria Silva",
      "patientPhoneHash": "abc123...",
      "startsAt": "2026-05-14T10:00:00+01:00",
      "endsAt": "2026-05-14T10:30:00+01:00",
      "status": "confirmed",
      "source": "voice_ai",
      "createdAt": "2026-05-13T14:00:00Z"
    }
  }
}

appointment.updated

Marcação editada (notes, reschedule, etc.). NÃO inclui mudanças de status — essas têm eventos dedicados.

appointment.cancelled

Marcação cancelada (paciente ou clínica). O slot fica livre.
{
  "type": "appointment.cancelled",
  "data": {
    "appointment": { "id": "uuid-...", "status": "cancelled", ... },
    "reason": "patient_requested" | "clinic_cancelled" | "auto"
  }
}

appointment.attended

Paciente foi atendido. Triggered por PATCH manual no PMS ou pela equipa no dashboard.

appointment.no_show

Detectado no-show: 30 min após startsAt sem mudança para attended. Cron horário marca automaticamente. Use este evento para acionar recovery flows do vosso lado.

appointment.rescheduled

Marcação substituída por outra. Payload inclui ambas:
{
  "type": "appointment.rescheduled",
  "data": {
    "original": { "id": "uuid-A", "status": "rescheduled", ... },
    "replacement": { "id": "uuid-B", "status": "confirmed", ... }
  }
}

Calls

call.started

Telnyx aceitou a chamada e a recepcionista AI vai falar. Útil para mostrar “chamada em curso” nos sistemas vossos.

call.completed

Chamada terminou. Inclui outcome:
{
  "type": "call.completed",
  "data": {
    "call": {
      "id": "uuid-...",
      "fromNumber": "+351912345678",
      "startedAt": "...",
      "endedAt": "...",
      "durationSeconds": 142,
      "outcome": "booking_created" | "info_only" | "handoff_to_human" | "voicemail" | "abandoned"
    }
  }
}

call.recording_ready

Recording disponível para download via GET /v1/calls/:id/recording (signed URL R2 com TTL 24h).
{
  "type": "call.recording_ready",
  "data": {
    "call": { "id": "uuid-...", "recordingExpiresAt": "..." }
  }
}

Patients

patient.recall_due

Paciente está há ≥6 meses sem voltar. Útil para recall campaigns no vosso CRM.
{
  "type": "patient.recall_due",
  "data": {
    "patientPhoneHash": "abc123...",
    "lastVisitAt": "2025-11-12T...",
    "daysSinceLastVisit": 183
  }
}

NPS

nps.submitted

Paciente respondeu ao SMS NPS pós-consulta.
{
  "type": "nps.submitted",
  "data": {
    "score": 4,
    "comment": "Equipa muito atenciosa, recomendo.",
    "appointmentId": "uuid-..."
  }
}

Triagem

triage.submitted

Paciente preencheu formulário de triagem pré-consulta.
{
  "type": "triage.submitted",
  "data": {
    "appointmentId": "uuid-...",
    "answers": { "main_complaint": "...", "since": "...", "severity": "..." }
  }
}

Tenant

tenant.config_updated

Configuração da clínica mudou (voz, horários, fallback number). Útil para invalidar caches do vosso lado.

Tabela resumida

EventoQuandoFonte típica
appointment.createdMarcação criadaAI, manual, self-service
appointment.updatedEdição de camposDashboard
appointment.cancelledCancelamentoPaciente, clínica, AI
appointment.attendedCheck-inPMS, dashboard manual
appointment.no_show30min após sem check-inCron horário
appointment.rescheduledRemarcaçãoAI, dashboard
call.startedTelnyx acceptReal-time
call.completedTelnyx hangupReal-time
call.recording_readyUpload R2 done~10s após hangup
patient.recall_due≥6m sem voltarCron diário
nps.submittedResposta SMSReal-time
triage.submittedResposta formReal-time
tenant.config_updatedEdit settingsReal-time

Subscrever apenas alguns

Por defeito, todos os eventos vão para o vosso endpoint. Podem filtrar na configuração:
Events to receive:
  ☑ appointment.*           (todos os de appointment)
  ☑ call.completed
  ☐ call.recording_ready
  ☐ nps.submitted
Wildcards (appointment.*) são equivalentes a “todos os subtypes”.