Skip to main content
These events cover the lifecycle of appointments managed by Timely.ai — whether via an AI agent integrating with Google Calendar or via a manual agent flow. Use them to sync with clinic management systems, gyms, salons, or any business with a scheduling component.

Event list

EventWhen it fires
appointment.scheduledA new appointment is confirmed
appointment.rescheduledThe date or time of an appointment is changed
appointment.canceledAn appointment is canceled
appointment.reminder_sentAn automatic reminder is sent to the contact

appointment.scheduled

When it fires

A new appointment is created and confirmed — either by the AI agent via Google Calendar integration, by an agent manually, or via API. The event fires only when the status is confirmed, not for drafts or pending attempts.

Payload

{
  "event": "appointment.scheduled",
  "event_id": "evt_01HX7A1K9MFQR4YZDNV7P9WCE",
  "timestamp": "2026-04-19T14:30:00Z",
  "workspace_id": "ws_abc123",
  "data": {
    "appointment_id": "appt_01HX7A1K",
    "conversation_id": "conv_01HX3B2K",
    "contact_id": "cont_456",
    "title": "Consulta - Ana Costa",
    "description": "Primeira consulta de avaliação",
    "start_at": "2026-04-22T09:00:00-03:00",
    "end_at": "2026-04-22T09:30:00-03:00",
    "timezone": "America/Sao_Paulo",
    "location": "Online — Google Meet",
    "meet_link": "https://meet.google.com/abc-defg-hij",
    "calendar_event_id": "cal_event_google_xyz",
    "calendar_id": "gcal_abc123",
    "attendant_id": "usr_321",
    "created_by": "agt_101",
    "created_by_type": "agent",
    "reminders": [
      { "method": "whatsapp", "minutes_before": 1440 },
      { "method": "whatsapp", "minutes_before": 60 }
    ],
    "created_at": "2026-04-19T14:30:00Z"
  }
}

Key fields

FieldTypeDescription
appointment_idstringUnique appointment ID
conversation_idstring | nullID of the conversation where the appointment was created
contact_idstringContact ID
titlestringAppointment title
start_atstringStart date/time with timezone offset (ISO 8601 with offset)
end_atstringEnd date/time with timezone offset
timezonestringTimezone in IANA format
locationstring | nullPhysical location or link
meet_linkstring | nullGoogle Meet link (when created via integration)
calendar_event_idstring | nullEvent ID in Google Calendar
attendant_idstring | nullAgent responsible for the appointment
created_by_typeenumagent, attendant, api, automation
remindersarrayList of configured reminders with method and minutes_before

Usage example

Use appointment.scheduled to register the appointment in your internal system, confirm it with the contact via a separate email, or block time slots in another calendar.

appointment.rescheduled

When it fires

The date, time, or location of an existing appointment is changed. The event includes both the previous and new values to facilitate auditing and targeted notifications.

Payload

{
  "event": "appointment.rescheduled",
  "event_id": "evt_01HX7B3M2PGTS6YADOV8Q1XDF",
  "timestamp": "2026-04-20T10:00:00Z",
  "workspace_id": "ws_abc123",
  "data": {
    "appointment_id": "appt_01HX7A1K",
    "contact_id": "cont_456",
    "changes": {
      "start_at": {
        "before": "2026-04-22T09:00:00-03:00",
        "after": "2026-04-23T14:00:00-03:00"
      },
      "end_at": {
        "before": "2026-04-22T09:30:00-03:00",
        "after": "2026-04-23T14:30:00-03:00"
      }
    },
    "rescheduled_by": "usr_321",
    "rescheduled_by_type": "attendant",
    "rescheduled_at": "2026-04-20T10:00:00Z"
  }
}

Key fields

FieldTypeDescription
appointment_idstringID of the changed appointment
changesobjectModified fields with before and after
rescheduled_bystringID of who rescheduled
rescheduled_by_typeenumagent, attendant, contact, api
rescheduled_atstringISO 8601 timestamp of rescheduling

appointment.canceled

When it fires

An appointment is canceled. Cancellation can be initiated by the contact, the agent, the AI agent, or via API. The Google Calendar event is also updated automatically when an active integration is present.

Payload

{
  "event": "appointment.canceled",
  "event_id": "evt_01HX7C5P4RHTW7ZBEPV9S2YEG",
  "timestamp": "2026-04-21T08:30:00Z",
  "workspace_id": "ws_abc123",
  "data": {
    "appointment_id": "appt_01HX7A1K",
    "contact_id": "cont_456",
    "title": "Consulta - Ana Costa",
    "start_at": "2026-04-23T14:00:00-03:00",
    "cancellation_reason": "contact_requested",
    "cancellation_note": "Cliente solicitou cancelamento via WhatsApp",
    "canceled_by": "agt_101",
    "canceled_by_type": "agent",
    "canceled_at": "2026-04-21T08:30:00Z"
  }
}

Key fields

FieldTypeDescription
cancellation_reasonenumcontact_requested, attendant_decision, no_show, api, automation
cancellation_notestring | nullNote about the cancellation reason
canceled_bystringID of who performed the cancellation
canceled_by_typeenumagent, attendant, contact, api
canceled_atstringISO 8601 timestamp of cancellation
After an appointment.canceled, the appointment_id remains accessible via the API for history purposes, but the status is canceled. No new events will be emitted for that appointment.

appointment.reminder_sent

When it fires

An automatic reminder is sent to the contact before the appointment time. Reminders are configured at the time the appointment is created and fired automatically by the system.

Payload

{
  "event": "appointment.reminder_sent",
  "event_id": "evt_01HX7D7Q5SJUW8ZCFQWA3ZFH",
  "timestamp": "2026-04-22T13:00:00Z",
  "workspace_id": "ws_abc123",
  "data": {
    "appointment_id": "appt_01HX7A1K",
    "contact_id": "cont_456",
    "title": "Consulta - Ana Costa",
    "start_at": "2026-04-23T14:00:00-03:00",
    "reminder_method": "whatsapp",
    "minutes_before": 1440,
    "message_id": "msg_01HX7D7Q",
    "sent_at": "2026-04-22T13:00:00Z"
  }
}

Key fields

FieldTypeDescription
appointment_idstringID of the appointment the reminder refers to
reminder_methodenumwhatsapp, email, sms
minutes_beforeintegerReminder lead time in minutes (e.g. 1440 = 24h before)
message_idstring | nullID of the message sent via the channel (when whatsapp)
sent_atstringISO 8601 timestamp of sending

Usage example

Use appointment.reminder_sent to record in your system that the contact was notified. If a reminder fails to arrive, investigate whether the channel associated with the contact is still connected.