How reminders work in ESUS. The FHIR Appointment resource does not carry a built-in reminders[] field. Reminders are delivered by your application (or a partner service), triggered by the appointment’s scheduled time and the patient’s communication preferences. This page describes the recommended integration pattern.

Integration Pattern

  1. Read the appointment. Query for upcoming appointments (status=booked) that fall within the lead time you want (e.g. appointments starting in the next 24 hours).
  2. Read the patient. Retrieve the patient’s preferred contact channels from Patient.telecom[] (SMS, email, phone) and Patient.communication[] (preferred language).
  3. Send the reminder via your messaging provider (SMS gateway, email platform, voice call, push-notification service).
  4. Record the outcome. Create a Communication FHIR resource linked to the appointment so the reminder is auditable.

Query Upcoming Appointments

# Booked appointments between now and 24h from now for a practitioner
curl "https://api.esus.health/fhir/Appointment?practitioner=a7b1c2d3-e4f5-6789-abcd-ef0123456789&status=booked&date=ge2026-04-21T00:00:00Z&date=le2026-04-22T00:00:00Z" \
  -H "Authorization: Bearer YOUR_TOKEN"

Read Patient Contact Details

curl https://api.esus.health/fhir/Patient/3fa85f64-5717-4562-b3fc-2c963f66afa6 \
  -H "Authorization: Bearer YOUR_TOKEN"

Response includes telecom[]:

{
  "telecom": [
    { "system": "email", "value": "patient@email.com", "use": "home" },
    { "system": "sms",   "value": "+54911..." }
  ]
}
OffsetUse case
1 week beforeNon-urgent appointments, surgery prep
24 hours beforeStandard reminder
2 hours beforeSame-day reminder
30 minutes beforeFinal reminder

Log the Reminder with Communication

Create a FHIR Communication once the message is delivered:

curl -X POST https://api.esus.health/fhir/Communication \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/fhir+json" \
  -d '{
    "status": "completed",
    "subjectId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
    "about": [
      { "reference": "Appointment/d4e5f6a7-b8c9-0123-def4-567890abcdef" }
    ],
    "category": [{
      "coding": [{
        "system": "http://terminology.hl7.org/CodeSystem/communication-category",
        "code": "notification"
      }]
    }],
    "medium": [{
      "coding": [{ "code": "SMSWRIT", "display": "SMS message" }]
    }],
    "sent": "2026-04-20T10:00:00Z",
    "payload": [
      { "contentString": "Reminder: your appointment with Dr. Johnson is tomorrow at 09:00." }
    ]
  }'

Capturing Confirmations

If the patient replies to a reminder (“YES” / “CANCEL”), translate that reply into an AppointmentResponse with participantStatus set to accepted or declined, and update the parent Appointment.status accordingly.