Saltar al contenido principal

Calendar Integration

Connect once, manage everywhere. Once you connect Google Calendar or Microsoft Outlook (Teams), your Voilà lessons live on your calendar exactly like any other meeting — and anything you do to the event from your calendar flows back into Voilà automatically. Reschedule, cancel, accept, decline — both sides stay in sync within seconds.

This page is written for tutors. The "What your students experience" section explains exactly what your students see on their end so you can confidently steer your whole schedule from your calendar.

Supported providers

ProviderVideo link automatically attachedWhat gets created
Google CalendarGoogle MeetOne event per lesson, master event per recurring series
Microsoft Outlook / TeamsMicrosoft TeamsOne event per lesson, one event per recurring occurrence

You can connect one calendar provider at a time. To switch, disconnect the current one first under Settings → Integrations.

Connecting Google Calendar

  1. Go to Settings → Integrations, or Scheduling → Connect Google Calendar.
  2. Click Connect Google Calendar.
  3. Sign in with your Google account and authorize Voilà to read and write events.
  4. Your calendar starts syncing immediately.

What happens the moment you connect: every confirmed future Voilà lesson is pushed onto your Google Calendar — each with a Google Meet link, attendees pre-populated, and a "Booked via Voilà" body. There is nothing else to do.

Connecting Microsoft Outlook / Teams

  1. Go to Settings → Integrations, or Scheduling → Connect Outlook Calendar.
  2. Click Connect Outlook Calendar.
  3. Sign in with your Microsoft account and authorize Voilà to read and write events.
  4. Your calendar starts syncing immediately.

Each lesson lands on your Outlook calendar as a Teams meeting (the join link is attached automatically), with the student listed as an attendee. The same backfill behaviour applies: future Voilà lessons appear on your Outlook calendar straight away.

What appears on your calendar (Voilà → calendar)

Voilà eventWhat you see on the calendar
A 1:1 booking is confirmedAn invite at the lesson time, with the Meet/Teams link, the student as an attendee, and a Voilà-authored body.
A group lesson confirmsThe same event, with every accepted member on the attendee list. As more members accept, they're added; if a member drops, they're removed.
A recurring lesson is createdGoogle: one master recurring event covering the full series. Outlook: one event per occurrence (so per-instance updates flow cleanly through Microsoft Graph).
A reschedule is accepted in VoilàThe invite's start/end time updates in place and attendees receive an update notice. Works on both Google and Outlook.
A lesson is cancelled in VoilàThe calendar event is removed and attendees are notified with a cancellation notice. Works on both Google and Outlook.
A recurring occurrence is skipped in VoilàJust that one occurrence is cancelled — the rest of the series stays intact.

What syncs back into Voilà (calendar → Voilà)

This is the section that lets you "live in your calendar". Anything below changes Voilà state automatically.

You move the event time

Dragging a Voilà event to a different slot, or editing its start/end, opens a reschedule proposal inside Voilà. Once the student confirms (in-app or by replying to the email), the event time is locked in across both systems. Until then, the event sits as a pending proposal — the student can still see and accept/decline it from inside Voilà.

You delete or cancel the event

Voilà marks the lesson cancelled and runs the tutor-cancel branch of the cancellation policy:

  • The student is refunded the full payment (if Stripe) or has their session credit returned (if a session package), regardless of whether the cancel happened before or after the cutoff. Tutor-attributed cancels always make the student whole.
  • For group lessons, every paid seat is refunded.
  • The student receives a cancellation email and a chat-card update.

You create a new event with one of your students as an attendee

If there's an active student–tutor relationship between you, Voilà will:

  • Auto-create a booking proposal for that lesson.
  • Email the student so they can confirm the time.
  • Hold the slot on your availability while the proposal is pending.

If the attendee isn't a known student of yours, Voilà records the event as a regular busy block on your availability — but doesn't create a booking.

You add any other event to your calendar

Any event you add — work meetings, dentist appointments, lunch with a friend — is treated as busy time and blocks new student bookings during that window. You don't have to do anything; this is automatic.

What your students experience

Whenever a lesson is confirmed, your student receives a calendar invite to the same event — with the Meet or Teams join link inside. So they can manage the lesson from their own calendar too. Here's exactly how Voilà reacts to each thing a student can do from their inbox or calendar app:

Student actionWhat Voilà does
Accepts the inviteNothing extra — they're already on the lesson. Their RSVP is recorded for visibility.
Declines a pending proposal from their calendarThe proposal is declined in Voilà. You're notified by email and chat.
Declines a confirmed 1:1 lesson from their calendarVoilà runs the student-cancel branch of the cancellation policy. Before the cutoff = full refund or credit returned; after the cutoff = forfeit (you keep the payment).
Declines from a confirmed group lessonJust that student's seat is refunded; the lesson continues for everyone else (subject to your minimum-seats rule).
Declines a recurring occurrenceThat single occurrence is skipped (refund or forfeit per the cancellation policy). The rest of the series is untouched.
Forwards the invite to another inboxNo effect on the lesson — Voilà is the source of truth, and forwarding the invite doesn't move the lesson or re-issue refunds.

In short: students can manage their participation entirely from their calendar invite, and you'll see every action reflected on the Voilà side within seconds.

Group lessons via calendar

Group lessons add one extra wrinkle — the minimum seats rule:

  • One member declines → that seat is refunded, the attendee is removed from the calendar event, the lesson continues.
  • Decline drops the lesson below min_seats BEFORE the cancellation cutoff → the entire lesson is cancelled, every paid seat is refunded, the calendar event is removed.
  • Decline drops the lesson below min_seats AFTER the cancellation cutoff → the lesson stays on (people who held their seat have already paid for the slot), and you receive a heads-up email so you can decide how to handle it.

Recurring lessons via calendar

Recurring lessons are stored differently on each provider, but the experience is the same:

  • Google: the series is a single master recurring event. Declining one instance from the calendar skips just that occurrence in Voilà; declining the master cancels every future occurrence.
  • Outlook: each occurrence is linked individually so per-instance updates from Microsoft Graph flow through cleanly. Declining one occurrence skips it in Voilà; declining the series ends future occurrences.
  • Skipping an occurrence from inside Voilà automatically cancels the matching calendar instance with a clean cancellation notice to attendees.
  • A tutor's cancellation-policy change is not applied retroactively to occurrences that already exist — each occurrence locks in the policy that was active when it was created.

How sync is delivered

Voilà uses push notifications (webhooks) as the primary trigger:

  • Google Calendar — Voilà subscribes to your calendar via Google's events.watch channel; updates land within seconds of you saving in Google Calendar.
  • Microsoft Outlook / Teams — Voilà subscribes via Microsoft Graph webhooks; same behaviour.

A small set of safety nets keeps the channel healthy:

  • Hourly maintenance job renews subscriptions before they expire and bootstraps any missing watches.
  • Backfill on connect pushes existing future Voilà lessons to your new calendar (and back-imports your existing calendar busy times).
  • Manual refresh is available from the Scheduling page — useful if you're testing or if a webhook briefly missed delivery.

Earlier versions of this page mentioned a "5-minute polling cycle". That's no longer accurate — sync is push-based and typically lands in well under 30 seconds.

Cancellation policy and refunds via calendar

Calendar-side cancellations follow exactly the same cancellation policy you've configured for Stripe-paid bookings (see Stripe Connect Payments):

  • You cancel (delete/cancel from your calendar): student is fully refunded, no matter the timing.
  • Student declines from their calendar before the cutoff: full refund or credit returned to the student.
  • Student declines from their calendar after the cutoff: payment is forfeited (you keep it) or the session credit is consumed.
  • Group lessons: per-seat refunds for individual declines; full refund of every paid seat if a tutor cancel or a pre-cutoff drop below min_seats cancels the lesson.

Privacy and scope

  • Voilà only reads and writes events on the calendar you connect — never any other calendars on your account.
  • Events Voilà reads are used solely for scheduling and availability calculations.
  • You can revoke access at any time under Settings → Integrations (or directly from your Google / Microsoft account settings).

Troubleshooting

Token expired

If sync stops, the OAuth token has likely expired. Open Settings → Integrations and click Reconnect.

Sync delays

Webhooks usually deliver within ~30 seconds. The hourly maintenance job is a safety net that renews subscriptions and re-syncs any delivery that briefly failed. You can also trigger a manual refresh from the Scheduling page.

Conflicts with non-Voilà events

If you try to confirm a Voilà booking on a slot that's covered by a non-Voilà event on your calendar, Voilà will warn you and let you override the conflict — useful when the calendar event is a "soft" hold you're happy to release.

Switching providers

Only one calendar can be connected at a time. Disconnect Google before connecting Outlook (or vice-versa) under Settings → Integrations.

Bidirectional sync, end-to-end

sequenceDiagram
participant Student
participant StudentCal as "Student Calendar"
participant Voila
participant TutorCal as "Tutor Calendar (Google or Outlook)"
participant Tutor

Note over Voila,TutorCal: Lesson confirmed in Voilà
Voila->>TutorCal: Create event with Meet or Teams link
TutorCal-->>Student: Invite delivered
TutorCal-->>StudentCal: Invite delivered

Note over Student,StudentCal: Student declines from inbox
StudentCal->>TutorCal: RSVP declined
TutorCal->>Voila: Webhook fires
Voila->>Voila: Run cancellation policy
Voila-->>Tutor: In-app and email notice
Voila-->>Student: Refund or forfeit confirmation

Note over Tutor,TutorCal: Tutor cancels the event
TutorCal->>Voila: Webhook fires
Voila->>Voila: Cancel and refund
Voila->>StudentCal: Calendar event removed