AppointmentMeeting
An appointment meeting represents the conferencing details for an appointment.
Meetings are created asynchronously after an appointment is scheduled, so the
status field reflects where the meeting is in its lifecycle. Meeting details
such as join_url are populated only once the status is created.
The host_url field is a proxy URL on the account's booking domain (the
canonical SavvyCal host, or an active custom domain when one is
configured) that the meeting host follows to start the meeting. Treat
this URL as a credential — anyone with it can start the meeting as the
host. It is valid through the appointment's end time + a 24h grace
window, after which it returns 410 Gone.
SavvyCal refreshes the underlying conferencing-provider URL transparently
behind the proxy, so the proxy URL generally remains stable across
appointment.meeting.updated events. It may change if SavvyCal rotates
the underlying token (e.g., for security reasons) or when the meeting is
replaced — a brand-new meeting with a new id, which happens when a
reschedule routes the appointment to a different host on the account.
Listen for appointment.meeting.updated and appointment.meeting.replaced
to keep stored copies fresh.
host_url is null when the meeting is not yet created or when the
conferencing provider has no distinct host start URL (e.g., Google Meet
uses a single shared URL).
The conferencing provider for the meeting.
zoom_adminThe most-recent failure reason, if the meeting is in a failed state.
The provider's identifier for the meeting.
82912345678Proxy URL the host follows to start the meeting. Treat as a
credential — anyone with this URL can start the meeting as host.
Valid through the appointment's end time + 24h grace window, then
returns 410 Gone. Generally stable, but may change across
appointment.meeting.updated events (e.g., if SavvyCal rotates the
token) and always changes when the meeting is replaced
(appointment.meeting.replaced). Null when the meeting is not
created or when the conferencing provider has no distinct host
start URL.
Unique identifier for the object.
Possible values: Value must match regular expression ^amtg_\w{12}$
The URL attendees use to join the meeting.
String representing the object's type.
Possible values: [appointment_meeting]
The meeting password, if any.
The current state of the meeting. Lifecycle:
pending— meeting creation has not yet been attemptedcreated— meeting was successfully created with the conferencing providerfailed— most-recent attempt failed; seeerror_messagefor detailsskipped— meeting creation was skipped (no conferencing configured)update_pending— meeting update is pending after a reschedulecancel_pending— meeting cancellation is pending after appointment cancelcanceled— meeting was successfully canceled with the conferencing provider
Possible values: [pending, created, failed, skipped, update_pending, cancel_pending, canceled]
{
"conferencing_provider": "zoom_admin",
"error_message": null,
"external_meeting_id": "82912345678",
"host_url": "https://book.acme.com/p/appointments/appt_a1b2c3d4e5f6/host?token=An5thqO6Li9Dy9WXe3IsJQYDEXGjS70GjQIdNntKZgw",
"id": "amtg_a1b2c3d4e5f6",
"join_url": "https://zoom.us/j/82912345678",
"object": "appointment_meeting",
"password": "abc123",
"status": "created"
}