AI agents and post-booking scheduling architecture
Meeting Rescheduling API for AI Agents: Repair a Booked Group Without Ghost Events
Booking is not the end of a hard meeting. The customer moves the deadline. One required engineer declines. The organizer asks to keep the day but change the hour. The agent sees an event ID and, like the fools we are, treats update and recreate as equivalent. Now two invitations survive, one participant answers the old thread, and nobody can prove which meeting is real.
Build a post-booking repair path in eight steps
Use one sixty-minute implementation review with three required people, one optional observer, mixed Google and Microsoft calendars, and one unconnected customer. The event is already booked. A required participant becomes unavailable, one old invitation reply arrives during repair, and the first update response times out.
- 1
Parse change intent before touching the event
Accept a typed command with authenticated actor, meeting ID, expected revision, requested action, reason class, allowed date range, duration, attendee change, location change, notification policy, approval mode, and idempotency key. Separatemove,change_duration,replace_participant,cancel, andcancel_and_rebook. Natural-language wording can propose the command; policy code must authorize its scope.- Calendar edit permission does not prove business authority to move or cancel the meeting.
- A request to change one field cannot silently rewrite participants, duration, or disclosure.
- Ambiguous scope returns one clarification instead of an event write.
- 2
Load the canonical meeting and its people contract
Read the durable scheduling record, current provider event, organizer, purpose, duration, IANA zones, required and optional participants, substitutes, outreach consent, connected free/busy sources, conversational windows, approvals, invitation state, and prior operations. Treat the provider event as a side effect linked to the record, not the only source of truth.- The agent can distinguish the canonical event from stale duplicates or copied holds.
- Required and optional roles survive the mutation unless the authorized command changes them.
- Private event titles and unrelated calendar details stay outside the matching record.
- 3
Open one repair revision and pause competing writers
Create a repair revision with owner, cause, dependency set, expiry, and terminal states. Invalidate proposals derived from the old event time. Pause reminder, webhook, and booking workers that could act on the prior revision. Late participant replies remain evidence only if identity, meeting, scope, time zone, consent, and freshness still fit the repair.- Two workers cannot open competing repairs for the same canonical meeting.
- An old approval cannot authorize a new slot or participant set.
- A late reply cannot restore a proposal that the organizer withdrew.
- 4
Refresh only the availability the change made stale
Read current approved Google and Microsoft free/busy for every required person affected by the new window. Ask the unconnected customer for bounded replacement windows through the approved channel when existing evidence no longer covers the range. Normalize source, retrieval or reply time, IANA zone, consent, expiry, and provider error. Silence and missing access remain unknown.- Valid participant windows outside the changed scope are preserved rather than requested again.
- Optional attendance is ranked only after every required person passes.
- Calendar connection remains helpful and optional, not a prerequisite for participation.
- 5
Choose the smallest repair that satisfies intent
Intersect required availability, then apply working hours, buffers, deadline, location, notice, and approved substitute rules. Compare move-in-place, duration reduction, participant substitution, and cancel-and-rebook under explicit policy. Return one accountable proposal with local times, participant roles, evidence versions, expiry, provider action, and the human decision still required.- The agent does not replace a required person because a smaller optional set is easier to book.
- A duration or substitute exception names the authority that can approve it.
- No-overlap returns a bounded date, duration, attendee, or cancellation decision.
- 6
Bind approval and commit one provider mutation
Bind approval to repair revision, exact slot, duration, required people, optional decision, organizer calendar, disclosure, and provider action. Re-check current required evidence. Use a stable operation key and provider precondition where supported. Prefer updating the canonical event when identity should remain; use cancel-and-rebook only when policy and provider behavior require a new event.- Repeated approval or queue delivery returns the existing operation result.
- The old event is not deleted before the replacement path has an authorized recovery plan.
- Notification scope is explicit for changed, removed, and added participants.
- 7
Reconcile timeouts and partial provider state
When an update or delete response is lost, mark the operation uncertain. Read provider state by stored event and correlation identifiers before retry. If a replacement was created but old cancellation failed, quarantine both IDs, stop reminders, and return one recovery action. Never report a clean reschedule from a successful HTTP response alone.- Retry follows reconciliation, not panic.
- Every side effect records attempted payload, provider result, revision, and safe next action.
- A partial repair stays visible until one canonical event is proven.
- 8
Verify invitations and close the old path
Read back the final event and verify time, zone, organizer, location, every required participant, optional decision, cancellation state of any superseded event, and invitation delivery or response state available from the provider. Close old proposals and reminders, publish one completion result, and preserve a redacted audit trail for later recovery.- One canonical event remains active for the meeting intent.
- Every participant receives the current invitation or a precise exception is assigned.
- Completion is the verified repaired meeting, not the update request.
Event CRUD and meeting repair are different contracts
A calendar API can update an event resource or delete it. That is necessary plumbing. The scheduling layer must decide whether the actor may make the change, which people are still required, which availability became stale, whether fresh consent or approval is needed, and what to do when the old and new invitation paths overlap.
A booking link can offer another slot. A poll can collect new votes. A calendar-sync utility can copy the changed block. An AI assistant can draft the apology. Scheduling execution owns the joined state until one current invitation set is verified.
Preserve meeting identity unless policy says otherwise
Participants reason about one meeting, even when providers expose several resources and message threads. Keep a stable internal meeting ID across revisions. Map provider event IDs, replacement IDs, cancellation records, participant messages, approvals, and retries back to that identity.
This makes late replies and webhooks classifiable. The system can reject a response to the superseded slot without discarding the participant’s valid identity or consent record. It can also explain why one provider event was replaced while the business meeting stayed the same.
Cancellation needs the same authority discipline as booking
A model may infer that ‘this no longer works’ means cancel. A participant may decline only for themselves. An assistant may be allowed to move the meeting but not remove an executive. Store cancellation authority by actor and scope, then require an explicit command for cancel-one, cancel-for-everyone, cancel-and-rebook, or abandon-repair.
The terminal result must name what happened: event updated, event replaced and prior event canceled, meeting canceled, or repair waiting on one authorized decision. Anything else sends the human back into reply-all archaeology.
Run the ghost-event acceptance test
Book one mixed-provider group meeting. Change a required calendar, submit the same reschedule twice, deliver one reply to the old proposal, add an approved substitute, and hide the first provider update response after it may have succeeded.
Pass when the old reply cannot revive stale state, valid windows survive, the substitute remains scope-bound, duplicate commands collapse, uncertain state is reconciled, superseded reminders stop, and one current event with every required invitation is read back. Fail when two plausible invitations remain alive.
Compare post-booking change paths by what they finish
The useful API does more than mutate an event. It repairs the people contract and proves which invitation is current.
| Decision vector | Direct calendar event CRUD | Link, poll, or custom repair worker | WonderCal execution direction |
|---|---|---|---|
| Execution completion | Updates or deletes provider resources; participant re-coordination remains application work. | Can gather a replacement choice, with canonical-event and invitation cleanup owned by the operator. | Target path carries one authorized repair to a verified current event or a bounded exception. |
| Cross-company reach | Covers calendars and events available through authenticated provider access. | Shared surfaces can reach external people, while mixed replies and provider state still need joining. | Designed to combine Google and Microsoft free/busy with bounded windows from unconnected people. |
| Optional-sync fallback | An event mutation endpoint does not collect replacement windows from an unconnected participant. | Forms and messages can collect new input, with identity, expiry, and correction handling to build. | Target model keeps connected and conversational evidence inside the same repair revision. |
| Recovery and observability | Provider errors and IDs exist; meeting-level revisions, uncertain writes, and ghost cleanup remain client work. | Full control, with locks, idempotency, reconciliation, and terminal proof to maintain. | Target release should expose repair state, evidence, approvals, side effects, retries, and final proof. |
| Time to ship | Fast for a narrow event edit and incomplete for cross-company participant repair. | Rational when post-booking coordination is core product behavior the team wants to own. | Worth adopting when the live contract removes repair logic without hiding approval or failure state. |
Execution completion
Direct calendar event CRUD
Updates or deletes provider resources; participant re-coordination remains application work.
Link, poll, or custom repair worker
Can gather a replacement choice, with canonical-event and invitation cleanup owned by the operator.
WonderCal execution direction
Target path carries one authorized repair to a verified current event or a bounded exception.
Cross-company reach
Direct calendar event CRUD
Covers calendars and events available through authenticated provider access.
Link, poll, or custom repair worker
Shared surfaces can reach external people, while mixed replies and provider state still need joining.
WonderCal execution direction
Designed to combine Google and Microsoft free/busy with bounded windows from unconnected people.
Optional-sync fallback
Direct calendar event CRUD
An event mutation endpoint does not collect replacement windows from an unconnected participant.
Link, poll, or custom repair worker
Forms and messages can collect new input, with identity, expiry, and correction handling to build.
WonderCal execution direction
Target model keeps connected and conversational evidence inside the same repair revision.
Recovery and observability
Direct calendar event CRUD
Provider errors and IDs exist; meeting-level revisions, uncertain writes, and ghost cleanup remain client work.
Link, poll, or custom repair worker
Full control, with locks, idempotency, reconciliation, and terminal proof to maintain.
WonderCal execution direction
Target release should expose repair state, evidence, approvals, side effects, retries, and final proof.
Time to ship
Direct calendar event CRUD
Fast for a narrow event edit and incomplete for cross-company participant repair.
Link, poll, or custom repair worker
Rational when post-booking coordination is core product behavior the team wants to own.
WonderCal execution direction
Worth adopting when the live contract removes repair logic without hiding approval or failure state.
Frequently asked questions
What should a meeting rescheduling API return?
Should an AI agent update an event or cancel and recreate it?
How do idempotency keys prevent ghost meetings?
Does every participant need a connected calendar to reschedule?
Where can developers review WonderCal’s API direction?
Primary sources
- Google Calendar API: Events update — official Google event replacement operation, parameters, responses, and notification behavior
- Google Calendar API: Synchronize resources — official incremental synchronization and invalid-token recovery guidance
- Microsoft Graph: Update event — official Microsoft event update operation and attendee-notification behavior
- Microsoft Graph: Delete event — official Microsoft event deletion operation, permissions, and responses
- RFC 9110: Idempotent methods — HTTP idempotency semantics used as a base for safe command replay
Make the repair as reliable as the booking
Test one booked group meeting against stale replies, a changed required calendar, duplicate commands, an uncertain provider update, and one verified current invitation.
Review WonderCal for AI agents