@notionhq/apps 0.0.27 → 0.0.29

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,127 +1,215 @@
1
1
  import type { ConnectionActionInvoker } from "./connection-actions.js";
2
2
  /**
3
- * Script input for the "List available calendar resources (such as conference rooms)." effect (`calendar.listCalendarResources`),
3
+ * Script input for the "Cancel calendar events." effect (`calendar.cancelEvents`),
4
4
  * derived from its Tool Core definition's call_function input projection.
5
5
  *
6
- * Search for resources (often conference rooms) and check their availability for specific time slots.
7
- * Resources are scoped to a single account; pass `calendar` to target the account of the event you intend to attach the rooms to.
8
- * Only works with Google Workspace accounts that have admin permissions to view calendar resources.
9
- * Use this tool to find rooms when creating in-person meetings.
10
- * Pass multiple meeting times in timeSlots to get available rooms for each time slot independently.
6
+ * If the event has an organizer and it's not the user, then it cannot be canceled but we can update the user's response with another tool.
7
+ * If the event has attendees, they will receive a notification of the cancellation.
11
8
  */
12
- export type ListCalendarResourcesScriptInput = {
9
+ export type CancelEventsScriptInput = {
13
10
  /**
14
- * Specific time slots to check. Returns available resources for each time slot independently.
11
+ * Events to cancel.
15
12
  */
16
- timeSlots: Array<{
13
+ events: Array<{
17
14
  /**
18
- * Start of the time slot to check, as an ISO 8601 date-time.
15
+ * Calendar containing the event.
19
16
  */
20
- startAt: string;
17
+ calendar: {
18
+ /**
19
+ * Account that owns the event calendar.
20
+ */
21
+ accountId: string;
22
+ /**
23
+ * Event calendar identifier within the account.
24
+ */
25
+ calendarId: string;
26
+ };
21
27
  /**
22
- * End of the time slot to check, as an ISO 8601 date-time.
28
+ * Identifier of the event to cancel.
23
29
  */
24
- endAt: string;
30
+ eventId: string;
31
+ /**
32
+ * Optional summary of the event, used by agent UI.
33
+ */
34
+ eventSummary?: string;
25
35
  }>;
26
- /**
27
- * Minimum room capacity (number of people). MUST include the meeting organizer/user themselves in the count. For a 1-on-1, pass 2. For a meeting with N invitees besides the user, pass N+1.
28
- */
29
- minCapacity: number;
30
- /**
31
- * Maximum number of resources to return per time slot (default: 20, max: 40)
32
- */
33
- maxCount?: number;
34
- /**
35
- * If true, do not narrow rooms to the user's working-location building for this day. Set this when the user is explicitly asking about rooms in a different office (e.g. for a visiting team).
36
- */
37
- ignoreWorkingLocation?: boolean;
36
+ };
37
+ /**
38
+ * Canonical Tool Core output for the "Cancel calendar events." effect (`calendar.cancelEvents`).
39
+ * This is the definition's output schema; the effect's script surface may
40
+ * re-encode it before returning.
41
+ */
42
+ export type CancelEventsScriptOutput = {
43
+ canceledEvents: Array<{
44
+ calendar: {
45
+ accountId: string;
46
+ calendarId: string;
47
+ };
48
+ eventId: string;
49
+ /**
50
+ * Optional summary of the event, used by agent UI.
51
+ */
52
+ eventSummary?: string;
53
+ }>;
54
+ errors?: Array<{
55
+ /**
56
+ * An identifier for the item that failed (e.g., event summary for creation, event ID for updates/cancellations)
57
+ */
58
+ identifier: string;
59
+ /**
60
+ * Description of the error that occurred
61
+ */
62
+ errorMessage: string;
63
+ }>;
64
+ };
65
+ /**
66
+ * Script input for the "Create calendar events." effect (`calendar.createEvents`),
67
+ * derived from its Tool Core definition's call_function input projection.
68
+ *
69
+ * Events can be created on different calendars.
70
+ */
71
+ export type CreateEventsScriptInput = {
38
72
  /**
39
73
  * Date-times of returned events will be expressed in this time-zone
40
74
  */
41
75
  timeZone: string;
42
76
  /**
43
- * Calendar of the event the rooms will be attached to. Rooms are scoped to a single account.
77
+ * Events to create.
44
78
  */
45
- calendar?: {
79
+ events: Array<{
46
80
  /**
47
- * Account that owns the target calendar.
81
+ * Title of the event.
48
82
  */
49
- accountId: string;
83
+ summary: string;
50
84
  /**
51
- * Target calendar identifier within the account.
85
+ * Description of the event.
52
86
  */
53
- calendarId: string;
54
- };
55
- };
56
- /**
57
- * Canonical Tool Core output for the "List available calendar resources (such as conference rooms)." effect (`calendar.listCalendarResources`).
58
- * This is the definition's output schema; the effect's script surface may
59
- * re-encode it before returning.
60
- */
61
- export type ListCalendarResourcesScriptOutput = {
62
- /**
63
- * Results for each requested time slot, with available rooms sorted by capacity
64
- */
65
- resultsBySlot: Array<{
87
+ description?: string;
66
88
  /**
67
- * The time slot being checked
89
+ * Physical location where the event takes place, or remote conference link/info.
68
90
  */
69
- timeSlot: {
70
- startAt: string;
71
- endAt: string;
72
- };
91
+ location?: string;
73
92
  /**
74
- * Available conference rooms for this time slot, sorted by increasing capacity (smallest rooms first)
93
+ * Recurrence rules in RRULE format (e.g., ['RRULE:FREQ=WEEKLY;COUNT=10']). Can also include EXDATE for exception dates (e.g., ['RRULE:FREQ=WEEKLY;COUNT=10', 'EXDATE:2026-03-24T13:00:00']).
75
94
  */
76
- availableResources: Array<{
95
+ recurrenceRules?: Array<string>;
96
+ /**
97
+ * When the event is happening
98
+ */
99
+ period: {
77
100
  /**
78
- * Use this as the email when adding rooms to events
101
+ * Whether the event period uses all-day dates or date-times.
79
102
  */
80
- resourceEmail: string;
103
+ type: "DATE";
81
104
  /**
82
- * Display name of the conference room
105
+ * Start of the event.
83
106
  */
84
- resourceName: string;
107
+ start: {
108
+ /**
109
+ * Date in ISO 8601 format (no time)
110
+ */
111
+ date: string;
112
+ };
85
113
  /**
86
- * Building information
114
+ * End of the event.
87
115
  */
88
- building?: {
89
- buildingId: string;
90
- buildingName?: string;
116
+ end: {
117
+ /**
118
+ * Date in ISO 8601 format (no time)
119
+ */
120
+ date: string;
91
121
  };
122
+ } | {
92
123
  /**
93
- * Maximum number of people the room can accommodate
124
+ * Whether the event period uses all-day dates or date-times.
94
125
  */
95
- capacity?: number;
126
+ type: "DATE_TIME";
96
127
  /**
97
- * Floor location
128
+ * Start of the event.
98
129
  */
99
- floor?: string;
130
+ start: {
131
+ /**
132
+ * Date-time in ISO 8601 format, in UTC (ending with Z), or with TZ offset, or without TZ offset if `timeZone` is specified in which case will be interpreted as local time in that timeZone
133
+ */
134
+ dateTime: string;
135
+ /**
136
+ * IANA time zone for the event start date-time.
137
+ */
138
+ timeZone?: string;
139
+ };
100
140
  /**
101
- * Room description
141
+ * End of the event.
102
142
  */
103
- description?: string;
143
+ end: {
144
+ /**
145
+ * Date-time in ISO 8601 format, in UTC (ending with Z), or with TZ offset, or without TZ offset if `timeZone` is specified in which case will be interpreted as local time in that timeZone
146
+ */
147
+ dateTime: string;
148
+ /**
149
+ * IANA time zone for the event end date-time.
150
+ */
151
+ timeZone?: string;
152
+ };
153
+ };
154
+ /**
155
+ * Attendees to invite to the event
156
+ */
157
+ attendees?: Array<{
158
+ /**
159
+ * Email address of the attendee.
160
+ */
161
+ email: string;
162
+ /**
163
+ * Totally optional, provide only if you are sure of the attendee's name
164
+ */
165
+ displayName?: string;
166
+ /**
167
+ * Set only if the user was explicit about an attendee not being required
168
+ */
169
+ isOptional?: boolean;
104
170
  }>;
171
+ /**
172
+ * Resources (such as rooms) to invite to the event. Must be from the same account as `event.calendar`.
173
+ */
174
+ resources?: Array<{
175
+ /**
176
+ * Email address of the resource.
177
+ */
178
+ email?: string;
179
+ /**
180
+ * Display name of the resource.
181
+ */
182
+ displayName?: string;
183
+ /**
184
+ * Set only if the user was explicit about a resource not being required
185
+ */
186
+ isOptional: boolean;
187
+ }>;
188
+ /**
189
+ * Will create the event on the primary, default calendar if not specified.
190
+ */
191
+ calendar?: {
192
+ /**
193
+ * Account that owns the target calendar.
194
+ */
195
+ accountId: string;
196
+ /**
197
+ * Target calendar identifier within the account.
198
+ */
199
+ calendarId: string;
200
+ };
201
+ /**
202
+ * Whether to disable conferencing for this event.
203
+ */
204
+ disableConferencing?: boolean;
105
205
  }>;
106
206
  };
107
207
  /**
108
- * Script input for the "Fetch list of calendars of the user." effect (`calendar.listCalendars`),
109
- * derived from its Tool Core definition's call_function input projection.
110
- *
111
- * List of calendars grouped by account.
112
- */
113
- export type ListCalendarsScriptInput = {
114
- /**
115
- * Return only accounts linked to these email addresses. Useful to get calendars from a work account only for example. Do not specify if you are interested in getting the whole picture of someone's agenda across work and personal accounts.
116
- */
117
- onlyAccountEmails?: Array<string>;
118
- };
119
- /**
120
- * Canonical Tool Core output for the "Fetch list of calendars of the user." effect (`calendar.listCalendars`).
208
+ * Canonical Tool Core output for the "Create calendar events." effect (`calendar.createEvents`).
121
209
  * This is the definition's output schema; the effect's script surface may
122
210
  * re-encode it before returning.
123
211
  */
124
- export type ListCalendarsScriptOutput = {
212
+ export type CreateEventsScriptOutput = {
125
213
  accounts: Array<{
126
214
  accountId: string;
127
215
  /**
@@ -190,140 +278,1325 @@ export type ListCalendarsScriptOutput = {
190
278
  * The email address of the owner of this calendar.
191
279
  */
192
280
  ownerEmail?: string;
193
- }>;
194
- }>;
195
- };
196
- /**
197
- * Script input for the "List contacts" effect (`calendar.listContacts`),
198
- * derived from its Tool Core definition's call_function input projection.
199
- *
200
- * List the user's contacts from different accounts. Returns contact information including email addresses, names, phone numbers, and profile photos.
201
- */
202
- export type ListContactsScriptInput = {
203
- /**
204
- * Optional search queries to filter contacts by name or email. Results matching any query are included.
205
- */
206
- queries?: Array<string>;
207
- };
208
- /**
209
- * Canonical Tool Core output for the "List contacts" effect (`calendar.listContacts`).
210
- * This is the definition's output schema; the effect's script surface may
211
- * re-encode it before returning.
212
- */
213
- export type ListContactsScriptOutput = {
214
- accounts: Array<{
215
- accountId: string;
216
- /**
217
- * Google, Apple iCloud, Outlook, etc.
218
- */
219
- providerName: string;
220
- /**
221
- * The user email associated with this account. Useful to know if this account and its data should be used depending on context.
222
- */
223
- email?: string;
224
- /**
225
- * Whether this account is work-related or a personal account, if we know this information.
226
- */
227
- category?: "work" | "personal";
228
- capabilities: {
229
- /**
230
- * Does this account expose any calendars?
231
- */
232
- readCalendars: boolean;
233
- /**
234
- * Can we read calendar events from calendars of this account?
235
- */
236
- readEvents: boolean;
237
- /**
238
- * Can we write events in some calendars of this account? Calendars themselves might have their own set of restrictions.
239
- */
240
- writeEvents: boolean;
241
- /**
242
- * Can we use a text search query to find events in the calendars of this account?
243
- */
244
- searchEvents: boolean;
245
- /**
246
- * Does this account expose contacts?
247
- */
248
- readContacts: boolean;
249
- };
250
- /**
251
- * User can access the events of co-workers having an email address with one of these domains
252
- */
253
- coworkersEmailDomains?: Array<string>;
254
- contacts: Array<{
255
- /**
256
- * Unique identifier for the contact
257
- */
258
- id: string;
259
- /**
260
- * Primary email address of the contact
261
- */
262
- email: string;
263
- /**
264
- * Additional email addresses for this contact
265
- */
266
- alternateEmails?: Array<string>;
267
- /**
268
- * Display name of the contact
269
- */
270
- displayName?: string;
271
- /**
272
- * Phone numbers associated with this contact
273
- */
274
- phoneNumbers?: Array<{
281
+ createdEvents: Array<{
282
+ calendar: {
283
+ accountId: string;
284
+ calendarId: string;
285
+ };
286
+ eventId: string;
287
+ summary: string;
288
+ description?: string;
275
289
  /**
276
- * The type of phone number (e.g., home, work, mobile)
290
+ * Physical location where the event takes place, or remote conference link/info.
277
291
  */
278
- type?: string;
292
+ location?: string;
293
+ /**
294
+ * Recurrence rules in RRULE format (e.g., ['RRULE:FREQ=WEEKLY;COUNT=10']). Can also include EXDATE for exception dates (e.g., ['RRULE:FREQ=WEEKLY;COUNT=10', 'EXDATE:2026-03-24T13:00:00']).
295
+ */
296
+ recurrenceRules?: Array<string>;
297
+ /**
298
+ * The data provider this event belongs to
299
+ */
300
+ provider?: "google" | "notion" | "icloud" | "outlook";
301
+ /**
302
+ * The URL to view the event in the Calendar app.
303
+ */
304
+ webUrl: string;
305
+ /**
306
+ * When the event is happening
307
+ */
308
+ period: {
309
+ type: "DATE";
310
+ start: {
311
+ /**
312
+ * Date in ISO 8601 format (no time)
313
+ */
314
+ date: string;
315
+ };
316
+ end: {
317
+ /**
318
+ * Date in ISO 8601 format (no time)
319
+ */
320
+ date: string;
321
+ };
322
+ } | {
323
+ type: "DATE_TIME";
324
+ start: {
325
+ /**
326
+ * Date-time in ISO 8601 format, in UTC (ending with Z), or with TZ offset
327
+ */
328
+ dateTime: string;
329
+ timeZone?: string;
330
+ };
331
+ end: {
332
+ /**
333
+ * Date-time in ISO 8601 format, in UTC (ending with Z), or with TZ offset
334
+ */
335
+ dateTime: string;
336
+ timeZone?: string;
337
+ };
338
+ };
339
+ /**
340
+ * Whether it's part of a recurring event series
341
+ */
342
+ isRecurring: boolean;
343
+ /**
344
+ * If true, the event does not block time on the calendar. This is equivalent to setting `Show me as to Available` in the Calendar UI.
345
+ */
346
+ isTransparent: boolean;
347
+ /**
348
+ * Is the event an auto-blocking event created from another event? Used to create blocked events on a calendar from events on another calendar. You can ignore auto-blocked events if there are events happening at the exact same time on other calendars.
349
+ */
350
+ isAutoBlock: boolean;
351
+ /**
352
+ * What kind of event is it? Standard, out of office, birthday...
353
+ */
354
+ eventType?: "fromGmail" | "default" | "focusTime" | "outOfOffice" | "birthday" | "availability";
355
+ /**
356
+ * Is an event confirmed, tentative or cancelled? This is different from the user's RSVP
357
+ */
358
+ eventStatus?: "confirmed" | "tentative" | "cancelled";
359
+ /**
360
+ * Whether it's a meeting, aka an event with attendees listed
361
+ */
362
+ isMeeting: boolean;
363
+ conferencingEntryPoints?: Array<{
364
+ uri: string;
365
+ accessCode?: string;
366
+ entryPointType?: "video" | "phone" | "sip" | "more";
367
+ label?: string;
368
+ meetingCode?: string;
369
+ passcode?: string;
370
+ password?: string;
371
+ pin?: string;
372
+ notes?: string;
373
+ signature?: string;
374
+ }>;
375
+ /**
376
+ * The URL to join the video conference, if available
377
+ */
378
+ conferencingUrl?: string;
379
+ /**
380
+ * The calendar user's RSVP status
381
+ */
382
+ responseStatus?: "needsAction" | "accepted" | "declined" | "tentative";
383
+ creator?: {
384
+ /**
385
+ * Whether this entry represents the calendar user
386
+ */
387
+ isSelf: boolean;
388
+ displayName?: string;
389
+ email?: string;
390
+ };
391
+ organizer?: {
392
+ /**
393
+ * Whether this entry represents the calendar user
394
+ */
395
+ isSelf: boolean;
396
+ displayName?: string;
397
+ email?: string;
398
+ };
399
+ attendees?: Array<{
400
+ /**
401
+ * Whether this entry represents the calendar user
402
+ */
403
+ isSelf: boolean;
404
+ displayName?: string;
405
+ email?: string;
406
+ isOptional: boolean;
407
+ isOrganizer?: boolean;
408
+ /**
409
+ * The calendar user's RSVP status
410
+ */
411
+ responseStatus?: "needsAction" | "accepted" | "declined" | "tentative";
412
+ }>;
413
+ resources?: Array<{
414
+ displayName?: string;
415
+ email?: string;
416
+ isOptional: boolean;
417
+ /**
418
+ * The calendar user's RSVP status
419
+ */
420
+ responseStatus?: "needsAction" | "accepted" | "declined" | "tentative";
421
+ }>;
422
+ colors?: {
423
+ foreground?: string;
424
+ background?: string;
425
+ };
426
+ attachments?: Array<{
427
+ url: string;
428
+ mimeType?: string;
429
+ title?: string;
430
+ notionWorkspaceId?: string;
431
+ }>;
432
+ }>;
433
+ }>;
434
+ }>;
435
+ errors?: Array<{
436
+ /**
437
+ * An identifier for the item that failed (e.g., event summary for creation, event ID for updates/cancellations)
438
+ */
439
+ identifier: string;
440
+ /**
441
+ * Description of the error that occurred
442
+ */
443
+ errorMessage: string;
444
+ }>;
445
+ };
446
+ /**
447
+ * Script input for the "Create a scheduling link" effect (`calendar.createSchedulingLink`),
448
+ * derived from its Tool Core definition's call_function input projection.
449
+ *
450
+ * Create a scheduling link (booking page) so others can book time on the user's calendar during specified availability windows.
451
+ */
452
+ export type CreateSchedulingLinkScriptInput = {
453
+ /**
454
+ * Calendar where meetings booked through this scheduling link will be created
455
+ */
456
+ bookingCalendar: {
457
+ /**
458
+ * Account that owns the booking calendar.
459
+ */
460
+ accountId: string;
461
+ /**
462
+ * Booking calendar identifier within the account.
463
+ */
464
+ calendarId: string;
465
+ };
466
+ /**
467
+ * Calendars to check for conflicts when determining available time slots. Events on these calendars will block booking availability.
468
+ */
469
+ conflictCalendars?: Array<{
470
+ /**
471
+ * Account that owns the conflict calendar.
472
+ */
473
+ accountId: string;
474
+ /**
475
+ * Conflict calendar identifier within the account.
476
+ */
477
+ calendarId: string;
478
+ }>;
479
+ /**
480
+ * Title of the scheduling link, shown on the booking page
481
+ */
482
+ title?: string;
483
+ /**
484
+ * Description shown to invitees on the booking page
485
+ */
486
+ description?: string;
487
+ /**
488
+ * Meeting duration in minutes
489
+ */
490
+ duration: number;
491
+ /**
492
+ * Time windows when the user is available for bookings
493
+ */
494
+ timeRanges: Array<{
495
+ /**
496
+ * Start of availability window in ISO 8601 format with timezone offset, e.g. '2024-08-22T09:00:00-04:00'
497
+ */
498
+ startDate: string;
499
+ /**
500
+ * End of availability window in ISO 8601 format with timezone offset, e.g. '2024-08-22T17:00:00-04:00'
501
+ */
502
+ endDate: string;
503
+ /**
504
+ * Recurrence rules in RRULE format (e.g., ['RRULE:FREQ=WEEKLY;COUNT=10']). Can also include EXDATE for exception dates (e.g., ['RRULE:FREQ=WEEKLY;COUNT=10', 'EXDATE:2026-03-24T13:00:00']).
505
+ */
506
+ recurrence?: Array<string>;
507
+ }>;
508
+ /**
509
+ * Type of scheduling link: 'singleUse' (one booking only), 'multiUse' (multiple bookings), 'recurring' (repeating weekly availability). Inferred from timeRanges if not provided.
510
+ */
511
+ type?: "singleUse" | "multiUse" | "recurring";
512
+ /**
513
+ * Custom URL slug for the scheduling link (letters, numbers, hyphens, underscores only). Must be between 1 and 32 characters. Auto-generated if not provided.
514
+ */
515
+ alias?: string;
516
+ /**
517
+ * If true (default), uses the user's default video conferencing provider
518
+ */
519
+ useDefaultConferencing?: boolean;
520
+ /**
521
+ * Minimum notice period in minutes before a meeting can be booked
522
+ */
523
+ minLeadTime?: number;
524
+ /**
525
+ * Maximum advance booking window in minutes (how far into the future meetings can be booked)
526
+ */
527
+ maxLeadTime?: number;
528
+ /**
529
+ * ISO 8601 date-time when this scheduling link expires and can no longer accept bookings
530
+ */
531
+ expirationDate?: string;
532
+ };
533
+ /**
534
+ * Canonical Tool Core output for the "Create a scheduling link" effect (`calendar.createSchedulingLink`).
535
+ * This is the definition's output schema; the effect's script surface may
536
+ * re-encode it before returning.
537
+ */
538
+ export type CreateSchedulingLinkScriptOutput = {
539
+ /**
540
+ * The created scheduling link
541
+ */
542
+ schedulingLink?: {
543
+ /**
544
+ * Unique ID of the created scheduling link
545
+ */
546
+ id: string;
547
+ /**
548
+ * Short ID used in the scheduling link URL
549
+ */
550
+ shortId: string;
551
+ /**
552
+ * Current booking calendar for this scheduling link
553
+ */
554
+ bookingCalendarRef: {
555
+ accountId: string;
556
+ calendarId: string;
557
+ };
558
+ /**
559
+ * Custom URL slug for the scheduling link
560
+ */
561
+ alias?: string;
562
+ /**
563
+ * The resolved type of the link
564
+ */
565
+ type?: "singleUse" | "multiUse" | "recurring";
566
+ /**
567
+ * Status of the scheduling link
568
+ */
569
+ status: string;
570
+ title?: string;
571
+ description?: string;
572
+ duration?: number;
573
+ /**
574
+ * Full URL where invitees can book a meeting
575
+ */
576
+ schedulingLinkUrl?: string;
577
+ timeRanges: Array<{
578
+ /**
579
+ * Start of availability window in ISO 8601 format with timezone offset, e.g. '2024-08-22T09:00:00-04:00'
580
+ */
581
+ startDate: string;
582
+ /**
583
+ * End of availability window in ISO 8601 format with timezone offset, e.g. '2024-08-22T17:00:00-04:00'
584
+ */
585
+ endDate: string;
586
+ /**
587
+ * Recurrence rules in RRULE format (e.g., ['RRULE:FREQ=WEEKLY;COUNT=10']). Can also include EXDATE for exception dates (e.g., ['RRULE:FREQ=WEEKLY;COUNT=10', 'EXDATE:2026-03-24T13:00:00']).
588
+ */
589
+ recurrence?: Array<string>;
590
+ /**
591
+ * Unique identifier for this time range
592
+ */
593
+ id: string;
594
+ }>;
595
+ };
596
+ errors?: Array<{
597
+ /**
598
+ * An identifier for the item that failed (e.g., event summary for creation, event ID for updates/cancellations)
599
+ */
600
+ identifier: string;
601
+ /**
602
+ * Description of the error that occurred
603
+ */
604
+ errorMessage: string;
605
+ }>;
606
+ };
607
+ /**
608
+ * Script input for the "Delete scheduling links." effect (`calendar.deleteSchedulingLinks`),
609
+ * derived from its Tool Core definition's call_function input projection.
610
+ *
611
+ * Delete scheduling links so they can no longer be booked. Existing meetings created from the links are not canceled.
612
+ */
613
+ export type DeleteSchedulingLinksScriptInput = {
614
+ /**
615
+ * Scheduling links to delete
616
+ */
617
+ schedulingLinks: Array<{
618
+ /**
619
+ * ID of the scheduling link to delete
620
+ */
621
+ schedulingLinkId: string;
622
+ /**
623
+ * Current booking calendar for this scheduling link. Used to verify the link's existing calendar before deleting it.
624
+ */
625
+ bookingCalendarRef: {
626
+ /**
627
+ * Account that owns the current booking calendar.
628
+ */
629
+ accountId: string;
630
+ /**
631
+ * Current booking calendar identifier within the account.
632
+ */
633
+ calendarId: string;
634
+ };
635
+ }>;
636
+ };
637
+ /**
638
+ * Canonical Tool Core output for the "Delete scheduling links." effect (`calendar.deleteSchedulingLinks`).
639
+ * This is the definition's output schema; the effect's script surface may
640
+ * re-encode it before returning.
641
+ */
642
+ export type DeleteSchedulingLinksScriptOutput = {
643
+ /**
644
+ * IDs of the scheduling links that were deleted
645
+ */
646
+ deletedSchedulingLinkIds: Array<string>;
647
+ errors?: Array<{
648
+ /**
649
+ * An identifier for the item that failed (e.g., event summary for creation, event ID for updates/cancellations)
650
+ */
651
+ identifier: string;
652
+ /**
653
+ * Description of the error that occurred
654
+ */
655
+ errorMessage: string;
656
+ }>;
657
+ };
658
+ /**
659
+ * Script input for the "List available calendar resources (such as conference rooms)." effect (`calendar.listCalendarResources`),
660
+ * derived from its Tool Core definition's call_function input projection.
661
+ *
662
+ * Search for resources (often conference rooms) and check their availability for specific time slots.
663
+ * Resources are scoped to a single account; pass `calendar` to target the account of the event you intend to attach the rooms to.
664
+ * Only works with Google Workspace accounts that have admin permissions to view calendar resources.
665
+ * Use this tool to find rooms when creating in-person meetings.
666
+ * Pass multiple meeting times in timeSlots to get available rooms for each time slot independently.
667
+ */
668
+ export type ListCalendarResourcesScriptInput = {
669
+ /**
670
+ * Specific time slots to check. Returns available resources for each time slot independently.
671
+ */
672
+ timeSlots: Array<{
673
+ /**
674
+ * Start of the time slot to check, as an ISO 8601 date-time.
675
+ */
676
+ startAt: string;
677
+ /**
678
+ * End of the time slot to check, as an ISO 8601 date-time.
679
+ */
680
+ endAt: string;
681
+ }>;
682
+ /**
683
+ * Minimum room capacity (number of people). MUST include the meeting organizer/user themselves in the count. For a 1-on-1, pass 2. For a meeting with N invitees besides the user, pass N+1.
684
+ */
685
+ minCapacity: number;
686
+ /**
687
+ * Maximum number of resources to return per time slot (default: 20, max: 40)
688
+ */
689
+ maxCount?: number;
690
+ /**
691
+ * If true, do not narrow rooms to the user's working-location building for this day. Set this when the user is explicitly asking about rooms in a different office (e.g. for a visiting team).
692
+ */
693
+ ignoreWorkingLocation?: boolean;
694
+ /**
695
+ * Date-times of returned events will be expressed in this time-zone
696
+ */
697
+ timeZone: string;
698
+ /**
699
+ * Calendar of the event the rooms will be attached to. Rooms are scoped to a single account.
700
+ */
701
+ calendar?: {
702
+ /**
703
+ * Account that owns the target calendar.
704
+ */
705
+ accountId: string;
706
+ /**
707
+ * Target calendar identifier within the account.
708
+ */
709
+ calendarId: string;
710
+ };
711
+ };
712
+ /**
713
+ * Canonical Tool Core output for the "List available calendar resources (such as conference rooms)." effect (`calendar.listCalendarResources`).
714
+ * This is the definition's output schema; the effect's script surface may
715
+ * re-encode it before returning.
716
+ */
717
+ export type ListCalendarResourcesScriptOutput = {
718
+ /**
719
+ * Results for each requested time slot, with available rooms sorted by capacity
720
+ */
721
+ resultsBySlot: Array<{
722
+ /**
723
+ * The time slot being checked
724
+ */
725
+ timeSlot: {
726
+ startAt: string;
727
+ endAt: string;
728
+ };
729
+ /**
730
+ * Available conference rooms for this time slot, sorted by increasing capacity (smallest rooms first)
731
+ */
732
+ availableResources: Array<{
733
+ /**
734
+ * Use this as the email when adding rooms to events
735
+ */
736
+ resourceEmail: string;
737
+ /**
738
+ * Display name of the conference room
739
+ */
740
+ resourceName: string;
741
+ /**
742
+ * Building information
743
+ */
744
+ building?: {
745
+ buildingId: string;
746
+ buildingName?: string;
747
+ };
748
+ /**
749
+ * Maximum number of people the room can accommodate
750
+ */
751
+ capacity?: number;
752
+ /**
753
+ * Floor location
754
+ */
755
+ floor?: string;
756
+ /**
757
+ * Room description
758
+ */
759
+ description?: string;
760
+ }>;
761
+ }>;
762
+ };
763
+ /**
764
+ * Script input for the "Fetch list of calendars of the user." effect (`calendar.listCalendars`),
765
+ * derived from its Tool Core definition's call_function input projection.
766
+ *
767
+ * List of calendars grouped by account.
768
+ */
769
+ export type ListCalendarsScriptInput = {
770
+ /**
771
+ * Return only accounts linked to these email addresses. Useful to get calendars from a work account only for example. Do not specify if you are interested in getting the whole picture of someone's agenda across work and personal accounts.
772
+ */
773
+ onlyAccountEmails?: Array<string>;
774
+ };
775
+ /**
776
+ * Canonical Tool Core output for the "Fetch list of calendars of the user." effect (`calendar.listCalendars`).
777
+ * This is the definition's output schema; the effect's script surface may
778
+ * re-encode it before returning.
779
+ */
780
+ export type ListCalendarsScriptOutput = {
781
+ accounts: Array<{
782
+ accountId: string;
783
+ /**
784
+ * Google, Apple iCloud, Outlook, etc.
785
+ */
786
+ providerName: string;
787
+ /**
788
+ * The user email associated with this account. Useful to know if this account and its data should be used depending on context.
789
+ */
790
+ email?: string;
791
+ /**
792
+ * Whether this account is work-related or a personal account, if we know this information.
793
+ */
794
+ category?: "work" | "personal";
795
+ capabilities: {
796
+ /**
797
+ * Does this account expose any calendars?
798
+ */
799
+ readCalendars: boolean;
800
+ /**
801
+ * Can we read calendar events from calendars of this account?
802
+ */
803
+ readEvents: boolean;
804
+ /**
805
+ * Can we write events in some calendars of this account? Calendars themselves might have their own set of restrictions.
806
+ */
807
+ writeEvents: boolean;
808
+ /**
809
+ * Can we use a text search query to find events in the calendars of this account?
810
+ */
811
+ searchEvents: boolean;
812
+ /**
813
+ * Does this account expose contacts?
814
+ */
815
+ readContacts: boolean;
816
+ };
817
+ /**
818
+ * User can access the events of co-workers having an email address with one of these domains
819
+ */
820
+ coworkersEmailDomains?: Array<string>;
821
+ calendars: Array<{
822
+ accountId: string;
823
+ calendarId: string;
824
+ name: string;
825
+ description?: string;
826
+ colors?: {
827
+ foreground?: string;
828
+ background?: string;
829
+ };
830
+ isPrimary: boolean;
831
+ /**
832
+ * Is this calendar read-only or can the user create/edit/delete events?
833
+ */
834
+ isReadOnly: boolean;
835
+ /**
836
+ * The contents of a calendar appear in the user calendar app only if that calendar is selected.
837
+ * Calendars that are not selected might be useful to get lower-signal events, but probably not to create events as it might not be visible to the user.
838
+ */
839
+ isSelected: boolean;
840
+ /**
841
+ * A hidden calendar is a calendar the user has access to but decided to hide completely from their calendar app.
842
+ * Hidden calendars might be useful to know what you might have access to, but keep in mind the user hid them and is most likely not aware of their content.
843
+ */
844
+ isHidden: boolean;
845
+ /**
846
+ * The email address of the owner of this calendar.
847
+ */
848
+ ownerEmail?: string;
849
+ }>;
850
+ }>;
851
+ };
852
+ /**
853
+ * Script input for the "List contacts" effect (`calendar.listContacts`),
854
+ * derived from its Tool Core definition's call_function input projection.
855
+ *
856
+ * List the user's contacts from different accounts. Returns contact information including email addresses, names, phone numbers, and profile photos.
857
+ */
858
+ export type ListContactsScriptInput = {
859
+ /**
860
+ * Optional search queries to filter contacts by name or email. Results matching any query are included.
861
+ */
862
+ queries?: Array<string>;
863
+ };
864
+ /**
865
+ * Canonical Tool Core output for the "List contacts" effect (`calendar.listContacts`).
866
+ * This is the definition's output schema; the effect's script surface may
867
+ * re-encode it before returning.
868
+ */
869
+ export type ListContactsScriptOutput = {
870
+ accounts: Array<{
871
+ accountId: string;
872
+ /**
873
+ * Google, Apple iCloud, Outlook, etc.
874
+ */
875
+ providerName: string;
876
+ /**
877
+ * The user email associated with this account. Useful to know if this account and its data should be used depending on context.
878
+ */
879
+ email?: string;
880
+ /**
881
+ * Whether this account is work-related or a personal account, if we know this information.
882
+ */
883
+ category?: "work" | "personal";
884
+ capabilities: {
885
+ /**
886
+ * Does this account expose any calendars?
887
+ */
888
+ readCalendars: boolean;
889
+ /**
890
+ * Can we read calendar events from calendars of this account?
891
+ */
892
+ readEvents: boolean;
893
+ /**
894
+ * Can we write events in some calendars of this account? Calendars themselves might have their own set of restrictions.
895
+ */
896
+ writeEvents: boolean;
897
+ /**
898
+ * Can we use a text search query to find events in the calendars of this account?
899
+ */
900
+ searchEvents: boolean;
901
+ /**
902
+ * Does this account expose contacts?
903
+ */
904
+ readContacts: boolean;
905
+ };
906
+ /**
907
+ * User can access the events of co-workers having an email address with one of these domains
908
+ */
909
+ coworkersEmailDomains?: Array<string>;
910
+ contacts: Array<{
911
+ /**
912
+ * Unique identifier for the contact
913
+ */
914
+ id: string;
915
+ /**
916
+ * Primary email address of the contact
917
+ */
918
+ email: string;
919
+ /**
920
+ * Additional email addresses for this contact
921
+ */
922
+ alternateEmails?: Array<string>;
923
+ /**
924
+ * Display name of the contact
925
+ */
926
+ displayName?: string;
927
+ /**
928
+ * Phone numbers associated with this contact
929
+ */
930
+ phoneNumbers?: Array<{
931
+ /**
932
+ * The type of phone number (e.g., home, work, mobile)
933
+ */
934
+ type?: string;
935
+ /**
936
+ * The phone number value
937
+ */
938
+ value: string;
939
+ }>;
940
+ /**
941
+ * URL to the contact's profile photo
942
+ */
943
+ photoUrl?: string;
944
+ }>;
945
+ }>;
946
+ };
947
+ /**
948
+ * Script input for the "View coworkers' scheduled events." effect (`calendar.listCoworkersEvents`),
949
+ * derived from its Tool Core definition's call_function input projection.
950
+ *
951
+ * Retrieves the detailed calendar events for specific coworkers within a time range.
952
+ * Use this to see what meetings or events people have scheduled, including event titles, times, and details.
953
+ * Only works for coworkers in the same organization domain.
954
+ */
955
+ export type ListCoworkersEventsScriptInput = {
956
+ /**
957
+ * Emails of relevant coworkers
958
+ */
959
+ coworkerEmails: Array<string>;
960
+ /**
961
+ * Start of the time range, as an ISO 8601 date-time.
962
+ */
963
+ timeMin: string;
964
+ /**
965
+ * End of the time range, as an ISO 8601 date-time.
966
+ */
967
+ timeMax: string;
968
+ /**
969
+ * Date-times of returned events will be expressed in this time-zone
970
+ */
971
+ timeZone: string;
972
+ };
973
+ /**
974
+ * Canonical Tool Core output for the "View coworkers' scheduled events." effect (`calendar.listCoworkersEvents`).
975
+ * This is the definition's output schema; the effect's script surface may
976
+ * re-encode it before returning.
977
+ */
978
+ export type ListCoworkersEventsScriptOutput = {
979
+ /**
980
+ * List of coworkers with their scheduled calendar events. Some coworkers may be excluded if their calendar could not be accessed.
981
+ */
982
+ coworkers: Array<{
983
+ accountId: string;
984
+ coworkerEmail: string;
985
+ profile?: {
986
+ displayName?: string;
987
+ email?: string;
988
+ photoUrl?: string;
989
+ };
990
+ events: Array<{
991
+ calendar: {
992
+ accountId: string;
993
+ calendarId: string;
994
+ };
995
+ eventId: string;
996
+ summary: string;
997
+ description?: string;
998
+ /**
999
+ * Physical location where the event takes place, or remote conference link/info.
1000
+ */
1001
+ location?: string;
1002
+ /**
1003
+ * Recurrence rules in RRULE format (e.g., ['RRULE:FREQ=WEEKLY;COUNT=10']). Can also include EXDATE for exception dates (e.g., ['RRULE:FREQ=WEEKLY;COUNT=10', 'EXDATE:2026-03-24T13:00:00']).
1004
+ */
1005
+ recurrenceRules?: Array<string>;
1006
+ /**
1007
+ * The data provider this event belongs to
1008
+ */
1009
+ provider?: "google" | "notion" | "icloud" | "outlook";
1010
+ /**
1011
+ * The URL to view the event in the Calendar app.
1012
+ */
1013
+ webUrl: string;
1014
+ /**
1015
+ * When the event is happening
1016
+ */
1017
+ period: {
1018
+ type: "DATE";
1019
+ start: {
1020
+ /**
1021
+ * Date in ISO 8601 format (no time)
1022
+ */
1023
+ date: string;
1024
+ };
1025
+ end: {
1026
+ /**
1027
+ * Date in ISO 8601 format (no time)
1028
+ */
1029
+ date: string;
1030
+ };
1031
+ } | {
1032
+ type: "DATE_TIME";
1033
+ start: {
1034
+ /**
1035
+ * Date-time in ISO 8601 format, in UTC (ending with Z), or with TZ offset
1036
+ */
1037
+ dateTime: string;
1038
+ timeZone?: string;
1039
+ };
1040
+ end: {
1041
+ /**
1042
+ * Date-time in ISO 8601 format, in UTC (ending with Z), or with TZ offset
1043
+ */
1044
+ dateTime: string;
1045
+ timeZone?: string;
1046
+ };
1047
+ };
1048
+ /**
1049
+ * Whether it's part of a recurring event series
1050
+ */
1051
+ isRecurring: boolean;
1052
+ /**
1053
+ * If true, the event does not block time on the calendar. This is equivalent to setting `Show me as to Available` in the Calendar UI.
1054
+ */
1055
+ isTransparent: boolean;
1056
+ /**
1057
+ * Is the event an auto-blocking event created from another event? Used to create blocked events on a calendar from events on another calendar. You can ignore auto-blocked events if there are events happening at the exact same time on other calendars.
1058
+ */
1059
+ isAutoBlock: boolean;
1060
+ /**
1061
+ * What kind of event is it? Standard, out of office, birthday...
1062
+ */
1063
+ eventType?: "fromGmail" | "default" | "focusTime" | "outOfOffice" | "birthday" | "availability";
1064
+ /**
1065
+ * Is an event confirmed, tentative or cancelled? This is different from the user's RSVP
1066
+ */
1067
+ eventStatus?: "confirmed" | "tentative" | "cancelled";
1068
+ /**
1069
+ * Whether it's a meeting, aka an event with attendees listed
1070
+ */
1071
+ isMeeting: boolean;
1072
+ conferencingEntryPoints?: Array<{
1073
+ uri: string;
1074
+ accessCode?: string;
1075
+ entryPointType?: "video" | "phone" | "sip" | "more";
1076
+ label?: string;
1077
+ meetingCode?: string;
1078
+ passcode?: string;
1079
+ password?: string;
1080
+ pin?: string;
1081
+ notes?: string;
1082
+ signature?: string;
1083
+ }>;
1084
+ /**
1085
+ * The URL to join the video conference, if available
1086
+ */
1087
+ conferencingUrl?: string;
1088
+ /**
1089
+ * The calendar user's RSVP status
1090
+ */
1091
+ responseStatus?: "needsAction" | "accepted" | "declined" | "tentative";
1092
+ creator?: {
1093
+ /**
1094
+ * Whether this entry represents the calendar user
1095
+ */
1096
+ isSelf: boolean;
1097
+ displayName?: string;
1098
+ email?: string;
1099
+ };
1100
+ organizer?: {
1101
+ /**
1102
+ * Whether this entry represents the calendar user
1103
+ */
1104
+ isSelf: boolean;
1105
+ displayName?: string;
1106
+ email?: string;
1107
+ };
1108
+ attendees?: Array<{
1109
+ /**
1110
+ * Whether this entry represents the calendar user
1111
+ */
1112
+ isSelf: boolean;
1113
+ displayName?: string;
1114
+ email?: string;
1115
+ isOptional: boolean;
1116
+ isOrganizer?: boolean;
1117
+ /**
1118
+ * The calendar user's RSVP status
1119
+ */
1120
+ responseStatus?: "needsAction" | "accepted" | "declined" | "tentative";
1121
+ }>;
1122
+ resources?: Array<{
1123
+ displayName?: string;
1124
+ email?: string;
1125
+ isOptional: boolean;
1126
+ /**
1127
+ * The calendar user's RSVP status
1128
+ */
1129
+ responseStatus?: "needsAction" | "accepted" | "declined" | "tentative";
1130
+ }>;
1131
+ colors?: {
1132
+ foreground?: string;
1133
+ background?: string;
1134
+ };
1135
+ attachments?: Array<{
1136
+ url: string;
1137
+ mimeType?: string;
1138
+ title?: string;
1139
+ notionWorkspaceId?: string;
1140
+ }>;
1141
+ }>;
1142
+ }>;
1143
+ errors?: Array<{
1144
+ /**
1145
+ * An identifier for the item that failed (e.g., event summary for creation, event ID for updates/cancellations)
1146
+ */
1147
+ identifier: string;
1148
+ /**
1149
+ * Description of the error that occurred
1150
+ */
1151
+ errorMessage: string;
1152
+ }>;
1153
+ };
1154
+ /**
1155
+ * Script input for the "List the user's events from different calendars." effect (`calendar.listEvents`),
1156
+ * derived from its Tool Core definition's call_function input projection.
1157
+ *
1158
+ * Date-times will be expressed in the time-zone passed as parameter.
1159
+ */
1160
+ export type ListEventsScriptInput = {
1161
+ /**
1162
+ * Start of the time range, as an ISO 8601 date-time.
1163
+ */
1164
+ timeMin: string;
1165
+ /**
1166
+ * End of the time range, as an ISO 8601 date-time.
1167
+ */
1168
+ timeMax: string;
1169
+ /**
1170
+ * Date-times of returned events will be expressed in this time-zone
1171
+ */
1172
+ timeZone: string;
1173
+ /**
1174
+ * Whether to include event invites the user has declined
1175
+ */
1176
+ includeDeclinedInvites?: boolean | null;
1177
+ };
1178
+ /**
1179
+ * Canonical Tool Core output for the "List the user's events from different calendars." effect (`calendar.listEvents`).
1180
+ * This is the definition's output schema; the effect's script surface may
1181
+ * re-encode it before returning.
1182
+ */
1183
+ export type ListEventsScriptOutput = {
1184
+ accounts: Array<{
1185
+ accountId: string;
1186
+ /**
1187
+ * Google, Apple iCloud, Outlook, etc.
1188
+ */
1189
+ providerName: string;
1190
+ /**
1191
+ * The user email associated with this account. Useful to know if this account and its data should be used depending on context.
1192
+ */
1193
+ email?: string;
1194
+ /**
1195
+ * Whether this account is work-related or a personal account, if we know this information.
1196
+ */
1197
+ category?: "work" | "personal";
1198
+ capabilities: {
1199
+ /**
1200
+ * Does this account expose any calendars?
1201
+ */
1202
+ readCalendars: boolean;
1203
+ /**
1204
+ * Can we read calendar events from calendars of this account?
1205
+ */
1206
+ readEvents: boolean;
1207
+ /**
1208
+ * Can we write events in some calendars of this account? Calendars themselves might have their own set of restrictions.
1209
+ */
1210
+ writeEvents: boolean;
1211
+ /**
1212
+ * Can we use a text search query to find events in the calendars of this account?
1213
+ */
1214
+ searchEvents: boolean;
1215
+ /**
1216
+ * Does this account expose contacts?
1217
+ */
1218
+ readContacts: boolean;
1219
+ };
1220
+ /**
1221
+ * User can access the events of co-workers having an email address with one of these domains
1222
+ */
1223
+ coworkersEmailDomains?: Array<string>;
1224
+ calendars: Array<{
1225
+ accountId: string;
1226
+ calendarId: string;
1227
+ name: string;
1228
+ description?: string;
1229
+ colors?: {
1230
+ foreground?: string;
1231
+ background?: string;
1232
+ };
1233
+ isPrimary: boolean;
1234
+ /**
1235
+ * Is this calendar read-only or can the user create/edit/delete events?
1236
+ */
1237
+ isReadOnly: boolean;
1238
+ /**
1239
+ * The contents of a calendar appear in the user calendar app only if that calendar is selected.
1240
+ * Calendars that are not selected might be useful to get lower-signal events, but probably not to create events as it might not be visible to the user.
1241
+ */
1242
+ isSelected: boolean;
1243
+ /**
1244
+ * A hidden calendar is a calendar the user has access to but decided to hide completely from their calendar app.
1245
+ * Hidden calendars might be useful to know what you might have access to, but keep in mind the user hid them and is most likely not aware of their content.
1246
+ */
1247
+ isHidden: boolean;
1248
+ /**
1249
+ * The email address of the owner of this calendar.
1250
+ */
1251
+ ownerEmail?: string;
1252
+ events: Array<{
1253
+ calendar: {
1254
+ accountId: string;
1255
+ calendarId: string;
1256
+ };
1257
+ eventId: string;
1258
+ summary: string;
1259
+ description?: string;
1260
+ /**
1261
+ * Physical location where the event takes place, or remote conference link/info.
1262
+ */
1263
+ location?: string;
1264
+ /**
1265
+ * Recurrence rules in RRULE format (e.g., ['RRULE:FREQ=WEEKLY;COUNT=10']). Can also include EXDATE for exception dates (e.g., ['RRULE:FREQ=WEEKLY;COUNT=10', 'EXDATE:2026-03-24T13:00:00']).
1266
+ */
1267
+ recurrenceRules?: Array<string>;
1268
+ /**
1269
+ * The data provider this event belongs to
1270
+ */
1271
+ provider?: "google" | "notion" | "icloud" | "outlook";
1272
+ /**
1273
+ * The URL to view the event in the Calendar app.
1274
+ */
1275
+ webUrl: string;
1276
+ /**
1277
+ * When the event is happening
1278
+ */
1279
+ period: {
1280
+ type: "DATE";
1281
+ start: {
1282
+ /**
1283
+ * Date in ISO 8601 format (no time)
1284
+ */
1285
+ date: string;
1286
+ };
1287
+ end: {
1288
+ /**
1289
+ * Date in ISO 8601 format (no time)
1290
+ */
1291
+ date: string;
1292
+ };
1293
+ } | {
1294
+ type: "DATE_TIME";
1295
+ start: {
1296
+ /**
1297
+ * Date-time in ISO 8601 format, in UTC (ending with Z), or with TZ offset
1298
+ */
1299
+ dateTime: string;
1300
+ timeZone?: string;
1301
+ };
1302
+ end: {
1303
+ /**
1304
+ * Date-time in ISO 8601 format, in UTC (ending with Z), or with TZ offset
1305
+ */
1306
+ dateTime: string;
1307
+ timeZone?: string;
1308
+ };
1309
+ };
1310
+ /**
1311
+ * Whether it's part of a recurring event series
1312
+ */
1313
+ isRecurring: boolean;
1314
+ /**
1315
+ * If true, the event does not block time on the calendar. This is equivalent to setting `Show me as to Available` in the Calendar UI.
1316
+ */
1317
+ isTransparent: boolean;
1318
+ /**
1319
+ * Is the event an auto-blocking event created from another event? Used to create blocked events on a calendar from events on another calendar. You can ignore auto-blocked events if there are events happening at the exact same time on other calendars.
1320
+ */
1321
+ isAutoBlock: boolean;
1322
+ /**
1323
+ * What kind of event is it? Standard, out of office, birthday...
1324
+ */
1325
+ eventType?: "fromGmail" | "default" | "focusTime" | "outOfOffice" | "birthday" | "availability";
1326
+ /**
1327
+ * Is an event confirmed, tentative or cancelled? This is different from the user's RSVP
1328
+ */
1329
+ eventStatus?: "confirmed" | "tentative" | "cancelled";
1330
+ /**
1331
+ * Whether it's a meeting, aka an event with attendees listed
1332
+ */
1333
+ isMeeting: boolean;
1334
+ conferencingEntryPoints?: Array<{
1335
+ uri: string;
1336
+ accessCode?: string;
1337
+ entryPointType?: "video" | "phone" | "sip" | "more";
1338
+ label?: string;
1339
+ meetingCode?: string;
1340
+ passcode?: string;
1341
+ password?: string;
1342
+ pin?: string;
1343
+ notes?: string;
1344
+ signature?: string;
1345
+ }>;
279
1346
  /**
280
- * The phone number value
1347
+ * The URL to join the video conference, if available
281
1348
  */
282
- value: string;
1349
+ conferencingUrl?: string;
1350
+ /**
1351
+ * The calendar user's RSVP status
1352
+ */
1353
+ responseStatus?: "needsAction" | "accepted" | "declined" | "tentative";
1354
+ creator?: {
1355
+ /**
1356
+ * Whether this entry represents the calendar user
1357
+ */
1358
+ isSelf: boolean;
1359
+ displayName?: string;
1360
+ email?: string;
1361
+ };
1362
+ organizer?: {
1363
+ /**
1364
+ * Whether this entry represents the calendar user
1365
+ */
1366
+ isSelf: boolean;
1367
+ displayName?: string;
1368
+ email?: string;
1369
+ };
1370
+ attendees?: Array<{
1371
+ /**
1372
+ * Whether this entry represents the calendar user
1373
+ */
1374
+ isSelf: boolean;
1375
+ displayName?: string;
1376
+ email?: string;
1377
+ isOptional: boolean;
1378
+ isOrganizer?: boolean;
1379
+ /**
1380
+ * The calendar user's RSVP status
1381
+ */
1382
+ responseStatus?: "needsAction" | "accepted" | "declined" | "tentative";
1383
+ }>;
1384
+ resources?: Array<{
1385
+ displayName?: string;
1386
+ email?: string;
1387
+ isOptional: boolean;
1388
+ /**
1389
+ * The calendar user's RSVP status
1390
+ */
1391
+ responseStatus?: "needsAction" | "accepted" | "declined" | "tentative";
1392
+ }>;
1393
+ colors?: {
1394
+ foreground?: string;
1395
+ background?: string;
1396
+ };
1397
+ attachments?: Array<{
1398
+ url: string;
1399
+ mimeType?: string;
1400
+ title?: string;
1401
+ notionWorkspaceId?: string;
1402
+ }>;
283
1403
  }>;
1404
+ }>;
1405
+ }>;
1406
+ /**
1407
+ * User preferences for calendar data
1408
+ */
1409
+ userPreferences: {
1410
+ /**
1411
+ * Whether the user prefers to display time in 12-hour (AM/PM) or 24-hour format
1412
+ */
1413
+ timeFormat?: "12_HOUR" | "24_HOUR";
1414
+ };
1415
+ errors: Array<{
1416
+ accountId: string;
1417
+ calendarId: string;
1418
+ error: string;
1419
+ }>;
1420
+ };
1421
+ /**
1422
+ * Script input for the "List the user's scheduling links." effect (`calendar.listSchedulingLinks`),
1423
+ * derived from its Tool Core definition's call_function input projection.
1424
+ *
1425
+ * List active, unexpired scheduling links with upcoming time ranges, optionally filtered by link type.
1426
+ */
1427
+ export type ListSchedulingLinksScriptInput = {
1428
+ /**
1429
+ * Return only scheduling links of this type
1430
+ */
1431
+ type?: "singleUse" | "multiUse" | "recurring";
1432
+ };
1433
+ /**
1434
+ * Canonical Tool Core output for the "List the user's scheduling links." effect (`calendar.listSchedulingLinks`).
1435
+ * This is the definition's output schema; the effect's script surface may
1436
+ * re-encode it before returning.
1437
+ */
1438
+ export type ListSchedulingLinksScriptOutput = {
1439
+ schedulingLinks: Array<{
1440
+ /**
1441
+ * Unique ID of the created scheduling link
1442
+ */
1443
+ id: string;
1444
+ /**
1445
+ * Short ID used in the scheduling link URL
1446
+ */
1447
+ shortId: string;
1448
+ /**
1449
+ * Current booking calendar for this scheduling link
1450
+ */
1451
+ bookingCalendarRef: {
1452
+ accountId: string;
1453
+ calendarId: string;
1454
+ };
1455
+ /**
1456
+ * Custom URL slug for the scheduling link
1457
+ */
1458
+ alias?: string;
1459
+ /**
1460
+ * The resolved type of the link
1461
+ */
1462
+ type?: "singleUse" | "multiUse" | "recurring";
1463
+ /**
1464
+ * Status of the scheduling link
1465
+ */
1466
+ status: string;
1467
+ title?: string;
1468
+ description?: string;
1469
+ duration?: number;
1470
+ /**
1471
+ * Full URL where invitees can book a meeting
1472
+ */
1473
+ schedulingLinkUrl?: string;
1474
+ timeRanges: Array<{
284
1475
  /**
285
- * URL to the contact's profile photo
1476
+ * Start of availability window in ISO 8601 format with timezone offset, e.g. '2024-08-22T09:00:00-04:00'
286
1477
  */
287
- photoUrl?: string;
1478
+ startDate: string;
1479
+ /**
1480
+ * End of availability window in ISO 8601 format with timezone offset, e.g. '2024-08-22T17:00:00-04:00'
1481
+ */
1482
+ endDate: string;
1483
+ /**
1484
+ * Recurrence rules in RRULE format (e.g., ['RRULE:FREQ=WEEKLY;COUNT=10']). Can also include EXDATE for exception dates (e.g., ['RRULE:FREQ=WEEKLY;COUNT=10', 'EXDATE:2026-03-24T13:00:00']).
1485
+ */
1486
+ recurrence?: Array<string>;
1487
+ /**
1488
+ * Unique identifier for this time range
1489
+ */
1490
+ id: string;
1491
+ }>;
1492
+ }>;
1493
+ };
1494
+ /**
1495
+ * Script input for the "Find available meeting times." effect (`calendar.suggestMeetingTimes`),
1496
+ * derived from its Tool Core definition's call_function input projection.
1497
+ *
1498
+ * Analyzes calendar availability for multiple participants and returns ranked time slots when everyone is free.
1499
+ * Use this when scheduling meetings or finding times that work for a group of people.
1500
+ * Returns suggestions sorted by preference, showing which participants are available, softly conflicted by an unconfirmed RSVP, busy, or have unknown status for each slot.
1501
+ */
1502
+ export type SuggestMeetingTimesScriptInput = {
1503
+ /**
1504
+ * Individual participant or group email addresses to find time with. Resolvable groups are expanded into their members.
1505
+ */
1506
+ participantEmails: Array<string>;
1507
+ /**
1508
+ * The duration of the meeting in minutes
1509
+ */
1510
+ durationMinutes: number;
1511
+ /**
1512
+ * Start of the time range to consider, as an ISO 8601 date-time.
1513
+ */
1514
+ timeMin: string;
1515
+ /**
1516
+ * End of the time range to consider, as an ISO 8601 date-time.
1517
+ */
1518
+ timeMax: string;
1519
+ /**
1520
+ * Maximum number of suggestions to return (default: 10)
1521
+ */
1522
+ maxCount?: number;
1523
+ /**
1524
+ * Date-times of returned events will be expressed in this time-zone
1525
+ */
1526
+ timeZone: string;
1527
+ /**
1528
+ * Whether to include participant event schedules in the response
1529
+ */
1530
+ includeParticipantSchedules?: boolean;
1531
+ };
1532
+ /**
1533
+ * Canonical Tool Core output for the "Find available meeting times." effect (`calendar.suggestMeetingTimes`).
1534
+ * This is the definition's output schema; the effect's script surface may
1535
+ * re-encode it before returning.
1536
+ */
1537
+ export type SuggestMeetingTimesScriptOutput = {
1538
+ /**
1539
+ * Ranked list of available meeting time slots, sorted from most to least preferable. Each slot includes start/end times and categorizes participants by availability status.
1540
+ */
1541
+ suggestions: Array<{
1542
+ /**
1543
+ * Start time in ISO 8601 format
1544
+ */
1545
+ startAt: string;
1546
+ /**
1547
+ * End time in ISO 8601 format
1548
+ */
1549
+ endAt: string;
1550
+ /**
1551
+ * Total number of hard event conflicts, including multiple events for one participant
1552
+ */
1553
+ hardEventConflictCount: number;
1554
+ /**
1555
+ * Total number of soft event conflicts, including multiple events for one participant
1556
+ */
1557
+ softEventConflictCount: number;
1558
+ /**
1559
+ * Participant emails for invitees with conflicts with this meeting time
1560
+ */
1561
+ unavailableParticipants: Array<string>;
1562
+ /**
1563
+ * Participant emails for invitees who are available for this meeting time
1564
+ */
1565
+ availableParticipants: Array<string>;
1566
+ /**
1567
+ * Participant emails for invitees with overlapping events whose RSVP is not firm yet
1568
+ */
1569
+ softConflictParticipants: Array<string>;
1570
+ /**
1571
+ * Participant emails for invitees with unknown status
1572
+ */
1573
+ unknownStatus: Array<string>;
1574
+ /**
1575
+ * Readable participant events that overlap this meeting time, including the participant and whether each event creates a hard or soft conflict
1576
+ */
1577
+ conflictingEvents: Array<{
1578
+ participantEmail: string;
1579
+ eventId: string;
1580
+ summary?: string;
1581
+ /**
1582
+ * What kind of event is it? Standard, out of office, birthday...
1583
+ */
1584
+ eventType: "fromGmail" | "default" | "focusTime" | "outOfOffice" | "birthday" | "availability";
1585
+ /**
1586
+ * The calendar user's RSVP status
1587
+ */
1588
+ responseStatus?: "needsAction" | "accepted" | "declined" | "tentative";
1589
+ conflictType: "hard" | "soft";
288
1590
  }>;
289
1591
  }>;
290
- };
291
- /**
292
- * Script input for the "View coworkers' scheduled events." effect (`calendar.listCoworkersEvents`),
293
- * derived from its Tool Core definition's call_function input projection.
294
- *
295
- * Retrieves the detailed calendar events for specific coworkers within a time range.
296
- * Use this to see what meetings or events people have scheduled, including event titles, times, and details.
297
- * Only works for coworkers in the same organization domain.
298
- */
299
- export type ListCoworkersEventsScriptInput = {
300
- /**
301
- * Emails of relevant coworkers
302
- */
303
- coworkerEmails: Array<string>;
304
- /**
305
- * Start of the time range, as an ISO 8601 date-time.
306
- */
307
- timeMin: string;
308
- /**
309
- * End of the time range, as an ISO 8601 date-time.
310
- */
311
- timeMax: string;
312
1592
  /**
313
- * Date-times of returned events will be expressed in this time-zone
1593
+ * Whether one or more suggestions use a shorter duration than requested because no sufficiently conflict-free times were available at the requested duration
314
1594
  */
315
- timeZone: string;
316
- };
317
- /**
318
- * Canonical Tool Core output for the "View coworkers' scheduled events." effect (`calendar.listCoworkersEvents`).
319
- * This is the definition's output schema; the effect's script surface may
320
- * re-encode it before returning.
321
- */
322
- export type ListCoworkersEventsScriptOutput = {
1595
+ usedFlexibleDuration: boolean;
323
1596
  /**
324
- * List of coworkers with their scheduled calendar events. Some coworkers may be excluded if their calendar could not be accessed.
1597
+ * List of participant schedules, one for each individual participant, including resolved group members. Each schedule includes basic participant information and a list of the participant's calendar events.
325
1598
  */
326
- coworkers: Array<{
1599
+ participantSchedules?: Array<{
327
1600
  accountId: string;
328
1601
  coworkerEmail: string;
329
1602
  profile?: {
@@ -332,29 +1605,16 @@ export type ListCoworkersEventsScriptOutput = {
332
1605
  photoUrl?: string;
333
1606
  };
334
1607
  events: Array<{
335
- calendar: {
336
- accountId: string;
337
- calendarId: string;
338
- };
339
1608
  eventId: string;
340
- summary: string;
341
- description?: string;
342
- /**
343
- * Physical location where the event takes place, or remote conference link/info.
344
- */
345
- location?: string;
346
1609
  /**
347
- * Recurrence rules in RRULE format (e.g., ['RRULE:FREQ=WEEKLY;COUNT=10']). Can also include EXDATE for exception dates (e.g., ['RRULE:FREQ=WEEKLY;COUNT=10', 'EXDATE:2026-03-24T13:00:00']).
348
- */
349
- recurrenceRules?: Array<string>;
350
- /**
351
- * The data provider this event belongs to
1610
+ * What kind of event is it? Standard, out of office, birthday...
352
1611
  */
353
- provider?: "google" | "notion" | "icloud" | "outlook";
1612
+ eventType?: "fromGmail" | "default" | "focusTime" | "outOfOffice" | "birthday" | "availability";
354
1613
  /**
355
- * The URL to view the event in the Calendar app.
1614
+ * Is an event confirmed, tentative or cancelled? This is different from the user's RSVP
356
1615
  */
357
- webUrl: string;
1616
+ eventStatus?: "confirmed" | "tentative" | "cancelled";
1617
+ summary: string;
358
1618
  /**
359
1619
  * When the event is happening
360
1620
  */
@@ -390,98 +1650,21 @@ export type ListCoworkersEventsScriptOutput = {
390
1650
  };
391
1651
  };
392
1652
  /**
393
- * Whether it's part of a recurring event series
1653
+ * The calendar user's RSVP status
394
1654
  */
395
- isRecurring: boolean;
1655
+ responseStatus?: "needsAction" | "accepted" | "declined" | "tentative";
1656
+ colors?: {
1657
+ foreground?: string;
1658
+ background?: string;
1659
+ };
396
1660
  /**
397
1661
  * If true, the event does not block time on the calendar. This is equivalent to setting `Show me as to Available` in the Calendar UI.
398
1662
  */
399
1663
  isTransparent: boolean;
400
- /**
401
- * Is the event an auto-blocking event created from another event? Used to create blocked events on a calendar from events on another calendar. You can ignore auto-blocked events if there are events happening at the exact same time on other calendars.
402
- */
403
- isAutoBlock: boolean;
404
- /**
405
- * What kind of event is it? Standard, out of office, birthday...
406
- */
407
- eventType?: "fromGmail" | "default" | "focusTime" | "outOfOffice" | "birthday" | "availability";
408
- /**
409
- * Is an event confirmed, tentative or cancelled? This is different from the user's RSVP
410
- */
411
- eventStatus?: "confirmed" | "tentative" | "cancelled";
412
1664
  /**
413
1665
  * Whether it's a meeting, aka an event with attendees listed
414
1666
  */
415
1667
  isMeeting: boolean;
416
- conferencingEntryPoints?: Array<{
417
- uri: string;
418
- accessCode?: string;
419
- entryPointType?: "video" | "phone" | "sip" | "more";
420
- label?: string;
421
- meetingCode?: string;
422
- passcode?: string;
423
- password?: string;
424
- pin?: string;
425
- notes?: string;
426
- signature?: string;
427
- }>;
428
- /**
429
- * The URL to join the video conference, if available
430
- */
431
- conferencingUrl?: string;
432
- /**
433
- * The calendar user's RSVP status
434
- */
435
- responseStatus?: "needsAction" | "accepted" | "declined" | "tentative";
436
- creator?: {
437
- /**
438
- * Whether this entry represents the calendar user
439
- */
440
- isSelf: boolean;
441
- displayName?: string;
442
- email?: string;
443
- };
444
- organizer?: {
445
- /**
446
- * Whether this entry represents the calendar user
447
- */
448
- isSelf: boolean;
449
- displayName?: string;
450
- email?: string;
451
- };
452
- attendees?: Array<{
453
- /**
454
- * Whether this entry represents the calendar user
455
- */
456
- isSelf: boolean;
457
- displayName?: string;
458
- email?: string;
459
- isOptional: boolean;
460
- isOrganizer?: boolean;
461
- /**
462
- * The calendar user's RSVP status
463
- */
464
- responseStatus?: "needsAction" | "accepted" | "declined" | "tentative";
465
- }>;
466
- resources?: Array<{
467
- displayName?: string;
468
- email?: string;
469
- isOptional: boolean;
470
- /**
471
- * The calendar user's RSVP status
472
- */
473
- responseStatus?: "needsAction" | "accepted" | "declined" | "tentative";
474
- }>;
475
- colors?: {
476
- foreground?: string;
477
- background?: string;
478
- };
479
- attachments?: Array<{
480
- url: string;
481
- mimeType?: string;
482
- title?: string;
483
- notionWorkspaceId?: string;
484
- }>;
485
1668
  }>;
486
1669
  }>;
487
1670
  errors?: Array<{
@@ -496,326 +1679,458 @@ export type ListCoworkersEventsScriptOutput = {
496
1679
  }>;
497
1680
  };
498
1681
  /**
499
- * Script input for the "List the user's events from different calendars." effect (`calendar.listEvents`),
1682
+ * Script input for the "Update calendar events." effect (`calendar.updateEvents`),
500
1683
  * derived from its Tool Core definition's call_function input projection.
501
1684
  *
502
- * Date-times will be expressed in the time-zone passed as parameter.
1685
+ * If the event has an organizer and it's not the user, then only RSVP changes are always allowed. Some participant events may also allow updates when guests can invite others.
1686
+ * If the event has attendees, they will receive a notification of the changes.
503
1687
  */
504
- export type ListEventsScriptInput = {
505
- /**
506
- * Start of the time range, as an ISO 8601 date-time.
507
- */
508
- timeMin: string;
509
- /**
510
- * End of the time range, as an ISO 8601 date-time.
511
- */
512
- timeMax: string;
1688
+ export type UpdateEventsScriptInput = {
513
1689
  /**
514
1690
  * Date-times of returned events will be expressed in this time-zone
515
1691
  */
516
1692
  timeZone: string;
517
1693
  /**
518
- * Whether to include event invites the user has declined
1694
+ * Event updates to apply.
519
1695
  */
520
- includeDeclinedInvites?: boolean | null;
521
- };
522
- /**
523
- * Canonical Tool Core output for the "List the user's events from different calendars." effect (`calendar.listEvents`).
524
- * This is the definition's output schema; the effect's script surface may
525
- * re-encode it before returning.
526
- */
527
- export type ListEventsScriptOutput = {
528
- accounts: Array<{
529
- accountId: string;
530
- /**
531
- * Google, Apple iCloud, Outlook, etc.
532
- */
533
- providerName: string;
1696
+ updates: Array<{
534
1697
  /**
535
- * The user email associated with this account. Useful to know if this account and its data should be used depending on context.
1698
+ * Must be set to the exact string "RSVP" in upper case.
536
1699
  */
537
- email?: string;
1700
+ updateType: "RSVP";
538
1701
  /**
539
- * Whether this account is work-related or a personal account, if we know this information.
1702
+ * Event to update.
540
1703
  */
541
- category?: "work" | "personal";
542
- capabilities: {
1704
+ event: {
543
1705
  /**
544
- * Does this account expose any calendars?
1706
+ * Calendar containing the event.
545
1707
  */
546
- readCalendars: boolean;
1708
+ calendar: {
1709
+ /**
1710
+ * Account that owns the event calendar.
1711
+ */
1712
+ accountId: string;
1713
+ /**
1714
+ * Event calendar identifier within the account.
1715
+ */
1716
+ calendarId: string;
1717
+ };
547
1718
  /**
548
- * Can we read calendar events from calendars of this account?
1719
+ * Identifier of the event to update.
549
1720
  */
550
- readEvents: boolean;
1721
+ eventId: string;
551
1722
  /**
552
- * Can we write events in some calendars of this account? Calendars themselves might have their own set of restrictions.
1723
+ * Optional summary of the event, used by agent UI.
553
1724
  */
554
- writeEvents: boolean;
1725
+ eventSummary?: string;
1726
+ };
1727
+ /**
1728
+ * RSVP update to apply to the event.
1729
+ */
1730
+ rsvp: {
555
1731
  /**
556
- * Can we use a text search query to find events in the calendars of this account?
1732
+ * The calendar user's RSVP status
557
1733
  */
558
- searchEvents: boolean;
1734
+ responseStatus: "needsAction" | "accepted" | "declined" | "tentative";
559
1735
  /**
560
- * Does this account expose contacts?
1736
+ * Optional comment accompanying the RSVP.
561
1737
  */
562
- readContacts: boolean;
1738
+ comment?: string;
563
1739
  };
1740
+ } | {
564
1741
  /**
565
- * User can access the events of co-workers having an email address with one of these domains
1742
+ * Must be set to the exact string "UPDATE" in upper case.
566
1743
  */
567
- coworkersEmailDomains?: Array<string>;
568
- calendars: Array<{
569
- accountId: string;
570
- calendarId: string;
571
- name: string;
572
- description?: string;
573
- colors?: {
574
- foreground?: string;
575
- background?: string;
1744
+ updateType: "UPDATE";
1745
+ /**
1746
+ * Event to update.
1747
+ */
1748
+ event: {
1749
+ /**
1750
+ * Calendar containing the event.
1751
+ */
1752
+ calendar: {
1753
+ /**
1754
+ * Account that owns the event calendar.
1755
+ */
1756
+ accountId: string;
1757
+ /**
1758
+ * Event calendar identifier within the account.
1759
+ */
1760
+ calendarId: string;
576
1761
  };
577
- isPrimary: boolean;
578
1762
  /**
579
- * Is this calendar read-only or can the user create/edit/delete events?
1763
+ * Identifier of the event to update.
580
1764
  */
581
- isReadOnly: boolean;
1765
+ eventId: string;
582
1766
  /**
583
- * The contents of a calendar appear in the user calendar app only if that calendar is selected.
584
- * Calendars that are not selected might be useful to get lower-signal events, but probably not to create events as it might not be visible to the user.
1767
+ * Optional summary of the event, used by agent UI.
585
1768
  */
586
- isSelected: boolean;
1769
+ eventSummary?: string;
1770
+ };
1771
+ /**
1772
+ * Changes to apply to the event.
1773
+ */
1774
+ update: {
587
1775
  /**
588
- * A hidden calendar is a calendar the user has access to but decided to hide completely from their calendar app.
589
- * Hidden calendars might be useful to know what you might have access to, but keep in mind the user hid them and is most likely not aware of their content.
1776
+ * Updated title of the event.
590
1777
  */
591
- isHidden: boolean;
1778
+ summary?: string;
592
1779
  /**
593
- * The email address of the owner of this calendar.
1780
+ * Updated description of the event.
594
1781
  */
595
- ownerEmail?: string;
596
- events: Array<{
597
- calendar: {
598
- accountId: string;
599
- calendarId: string;
600
- };
601
- eventId: string;
602
- summary: string;
603
- description?: string;
1782
+ description?: string;
1783
+ /**
1784
+ * Physical location where the event takes place, or remote conference link/info.
1785
+ */
1786
+ location?: string;
1787
+ /**
1788
+ * Recurrence rules in RRULE format (e.g., ['RRULE:FREQ=WEEKLY;COUNT=10']). Can also include EXDATE for exception dates (e.g., ['RRULE:FREQ=WEEKLY;COUNT=10', 'EXDATE:2026-03-24T13:00:00']).
1789
+ */
1790
+ recurrenceRules?: Array<string>;
1791
+ /**
1792
+ * When the event is happening
1793
+ */
1794
+ period?: {
604
1795
  /**
605
- * Physical location where the event takes place, or remote conference link/info.
1796
+ * Whether the updated event period uses all-day dates or date-times.
606
1797
  */
607
- location?: string;
1798
+ type: "DATE";
608
1799
  /**
609
- * Recurrence rules in RRULE format (e.g., ['RRULE:FREQ=WEEKLY;COUNT=10']). Can also include EXDATE for exception dates (e.g., ['RRULE:FREQ=WEEKLY;COUNT=10', 'EXDATE:2026-03-24T13:00:00']).
1800
+ * Updated start of the event.
610
1801
  */
611
- recurrenceRules?: Array<string>;
1802
+ start: {
1803
+ /**
1804
+ * Date in ISO 8601 format (no time)
1805
+ */
1806
+ date: string;
1807
+ };
612
1808
  /**
613
- * The data provider this event belongs to
1809
+ * Updated end of the event.
614
1810
  */
615
- provider?: "google" | "notion" | "icloud" | "outlook";
1811
+ end: {
1812
+ /**
1813
+ * Date in ISO 8601 format (no time)
1814
+ */
1815
+ date: string;
1816
+ };
1817
+ } | {
616
1818
  /**
617
- * The URL to view the event in the Calendar app.
1819
+ * Whether the updated event period uses all-day dates or date-times.
618
1820
  */
619
- webUrl: string;
1821
+ type: "DATE_TIME";
620
1822
  /**
621
- * When the event is happening
1823
+ * Updated start of the event.
622
1824
  */
623
- period: {
624
- type: "DATE";
625
- start: {
626
- /**
627
- * Date in ISO 8601 format (no time)
628
- */
629
- date: string;
630
- };
631
- end: {
632
- /**
633
- * Date in ISO 8601 format (no time)
634
- */
635
- date: string;
636
- };
637
- } | {
638
- type: "DATE_TIME";
639
- start: {
640
- /**
641
- * Date-time in ISO 8601 format, in UTC (ending with Z), or with TZ offset
642
- */
643
- dateTime: string;
644
- timeZone?: string;
645
- };
646
- end: {
647
- /**
648
- * Date-time in ISO 8601 format, in UTC (ending with Z), or with TZ offset
649
- */
650
- dateTime: string;
651
- timeZone?: string;
652
- };
1825
+ start: {
1826
+ /**
1827
+ * Date-time in ISO 8601 format, in UTC (ending with Z), or with TZ offset, or without TZ offset if `timeZone` is specified in which case will be interpreted as local time in that timeZone
1828
+ */
1829
+ dateTime: string;
1830
+ /**
1831
+ * IANA time zone for the updated event start date-time.
1832
+ */
1833
+ timeZone?: string;
653
1834
  };
654
1835
  /**
655
- * Whether it's part of a recurring event series
1836
+ * Updated end of the event.
656
1837
  */
657
- isRecurring: boolean;
1838
+ end: {
1839
+ /**
1840
+ * Date-time in ISO 8601 format, in UTC (ending with Z), or with TZ offset, or without TZ offset if `timeZone` is specified in which case will be interpreted as local time in that timeZone
1841
+ */
1842
+ dateTime: string;
1843
+ /**
1844
+ * IANA time zone for the updated event end date-time.
1845
+ */
1846
+ timeZone?: string;
1847
+ };
1848
+ };
1849
+ /**
1850
+ * Updated list of attendees for the event
1851
+ */
1852
+ attendees?: Array<{
658
1853
  /**
659
- * If true, the event does not block time on the calendar. This is equivalent to setting `Show me as to Available` in the Calendar UI.
1854
+ * Email address of the attendee.
660
1855
  */
661
- isTransparent: boolean;
1856
+ email: string;
662
1857
  /**
663
- * Is the event an auto-blocking event created from another event? Used to create blocked events on a calendar from events on another calendar. You can ignore auto-blocked events if there are events happening at the exact same time on other calendars.
1858
+ * Totally optional, provide only if you are sure of the attendee's name
664
1859
  */
665
- isAutoBlock: boolean;
1860
+ displayName?: string;
666
1861
  /**
667
- * What kind of event is it? Standard, out of office, birthday...
1862
+ * Set only if the user was explicit about an attendee not being required
668
1863
  */
669
- eventType?: "fromGmail" | "default" | "focusTime" | "outOfOffice" | "birthday" | "availability";
1864
+ isOptional?: boolean;
1865
+ }>;
1866
+ /**
1867
+ * Updated list of resources (such as rooms) for the event. Must be from the same account as `event.calendar`.
1868
+ */
1869
+ resources?: Array<{
670
1870
  /**
671
- * Is an event confirmed, tentative or cancelled? This is different from the user's RSVP
1871
+ * Email address of the resource.
672
1872
  */
673
- eventStatus?: "confirmed" | "tentative" | "cancelled";
1873
+ email?: string;
674
1874
  /**
675
- * Whether it's a meeting, aka an event with attendees listed
1875
+ * Display name of the resource.
676
1876
  */
677
- isMeeting: boolean;
678
- conferencingEntryPoints?: Array<{
679
- uri: string;
680
- accessCode?: string;
681
- entryPointType?: "video" | "phone" | "sip" | "more";
682
- label?: string;
683
- meetingCode?: string;
684
- passcode?: string;
685
- password?: string;
686
- pin?: string;
687
- notes?: string;
688
- signature?: string;
689
- }>;
1877
+ displayName?: string;
690
1878
  /**
691
- * The URL to join the video conference, if available
1879
+ * Set only if the user was explicit about a resource not being required
692
1880
  */
693
- conferencingUrl?: string;
1881
+ isOptional: boolean;
1882
+ }>;
1883
+ /**
1884
+ * Whether to add conferencing to this event. Only adds conferencing if the event has attendees and doesn't already have conferencing.
1885
+ */
1886
+ addConferencing?: boolean;
1887
+ };
1888
+ }>;
1889
+ };
1890
+ /**
1891
+ * Canonical Tool Core output for the "Update calendar events." effect (`calendar.updateEvents`).
1892
+ * This is the definition's output schema; the effect's script surface may
1893
+ * re-encode it before returning.
1894
+ */
1895
+ export type UpdateEventsScriptOutput = {
1896
+ updatedEvents: Array<{
1897
+ calendar: {
1898
+ accountId: string;
1899
+ calendarId: string;
1900
+ };
1901
+ eventId: string;
1902
+ summary: string;
1903
+ description?: string;
1904
+ /**
1905
+ * Physical location where the event takes place, or remote conference link/info.
1906
+ */
1907
+ location?: string;
1908
+ /**
1909
+ * Recurrence rules in RRULE format (e.g., ['RRULE:FREQ=WEEKLY;COUNT=10']). Can also include EXDATE for exception dates (e.g., ['RRULE:FREQ=WEEKLY;COUNT=10', 'EXDATE:2026-03-24T13:00:00']).
1910
+ */
1911
+ recurrenceRules?: Array<string>;
1912
+ /**
1913
+ * The data provider this event belongs to
1914
+ */
1915
+ provider?: "google" | "notion" | "icloud" | "outlook";
1916
+ /**
1917
+ * The URL to view the event in the Calendar app.
1918
+ */
1919
+ webUrl: string;
1920
+ /**
1921
+ * When the event is happening
1922
+ */
1923
+ period: {
1924
+ type: "DATE";
1925
+ start: {
694
1926
  /**
695
- * The calendar user's RSVP status
1927
+ * Date in ISO 8601 format (no time)
696
1928
  */
697
- responseStatus?: "needsAction" | "accepted" | "declined" | "tentative";
698
- creator?: {
699
- /**
700
- * Whether this entry represents the calendar user
701
- */
702
- isSelf: boolean;
703
- displayName?: string;
704
- email?: string;
705
- };
706
- organizer?: {
707
- /**
708
- * Whether this entry represents the calendar user
709
- */
710
- isSelf: boolean;
711
- displayName?: string;
712
- email?: string;
713
- };
714
- attendees?: Array<{
715
- /**
716
- * Whether this entry represents the calendar user
717
- */
718
- isSelf: boolean;
719
- displayName?: string;
720
- email?: string;
721
- isOptional: boolean;
722
- isOrganizer?: boolean;
723
- /**
724
- * The calendar user's RSVP status
725
- */
726
- responseStatus?: "needsAction" | "accepted" | "declined" | "tentative";
727
- }>;
728
- resources?: Array<{
729
- displayName?: string;
730
- email?: string;
731
- isOptional: boolean;
732
- /**
733
- * The calendar user's RSVP status
734
- */
735
- responseStatus?: "needsAction" | "accepted" | "declined" | "tentative";
736
- }>;
737
- colors?: {
738
- foreground?: string;
739
- background?: string;
740
- };
741
- attachments?: Array<{
742
- url: string;
743
- mimeType?: string;
744
- title?: string;
745
- notionWorkspaceId?: string;
746
- }>;
747
- }>;
1929
+ date: string;
1930
+ };
1931
+ end: {
1932
+ /**
1933
+ * Date in ISO 8601 format (no time)
1934
+ */
1935
+ date: string;
1936
+ };
1937
+ } | {
1938
+ type: "DATE_TIME";
1939
+ start: {
1940
+ /**
1941
+ * Date-time in ISO 8601 format, in UTC (ending with Z), or with TZ offset
1942
+ */
1943
+ dateTime: string;
1944
+ timeZone?: string;
1945
+ };
1946
+ end: {
1947
+ /**
1948
+ * Date-time in ISO 8601 format, in UTC (ending with Z), or with TZ offset
1949
+ */
1950
+ dateTime: string;
1951
+ timeZone?: string;
1952
+ };
1953
+ };
1954
+ /**
1955
+ * Whether it's part of a recurring event series
1956
+ */
1957
+ isRecurring: boolean;
1958
+ /**
1959
+ * If true, the event does not block time on the calendar. This is equivalent to setting `Show me as to Available` in the Calendar UI.
1960
+ */
1961
+ isTransparent: boolean;
1962
+ /**
1963
+ * Is the event an auto-blocking event created from another event? Used to create blocked events on a calendar from events on another calendar. You can ignore auto-blocked events if there are events happening at the exact same time on other calendars.
1964
+ */
1965
+ isAutoBlock: boolean;
1966
+ /**
1967
+ * What kind of event is it? Standard, out of office, birthday...
1968
+ */
1969
+ eventType?: "fromGmail" | "default" | "focusTime" | "outOfOffice" | "birthday" | "availability";
1970
+ /**
1971
+ * Is an event confirmed, tentative or cancelled? This is different from the user's RSVP
1972
+ */
1973
+ eventStatus?: "confirmed" | "tentative" | "cancelled";
1974
+ /**
1975
+ * Whether it's a meeting, aka an event with attendees listed
1976
+ */
1977
+ isMeeting: boolean;
1978
+ conferencingEntryPoints?: Array<{
1979
+ uri: string;
1980
+ accessCode?: string;
1981
+ entryPointType?: "video" | "phone" | "sip" | "more";
1982
+ label?: string;
1983
+ meetingCode?: string;
1984
+ passcode?: string;
1985
+ password?: string;
1986
+ pin?: string;
1987
+ notes?: string;
1988
+ signature?: string;
1989
+ }>;
1990
+ /**
1991
+ * The URL to join the video conference, if available
1992
+ */
1993
+ conferencingUrl?: string;
1994
+ /**
1995
+ * The calendar user's RSVP status
1996
+ */
1997
+ responseStatus?: "needsAction" | "accepted" | "declined" | "tentative";
1998
+ creator?: {
1999
+ /**
2000
+ * Whether this entry represents the calendar user
2001
+ */
2002
+ isSelf: boolean;
2003
+ displayName?: string;
2004
+ email?: string;
2005
+ };
2006
+ organizer?: {
2007
+ /**
2008
+ * Whether this entry represents the calendar user
2009
+ */
2010
+ isSelf: boolean;
2011
+ displayName?: string;
2012
+ email?: string;
2013
+ };
2014
+ attendees?: Array<{
2015
+ /**
2016
+ * Whether this entry represents the calendar user
2017
+ */
2018
+ isSelf: boolean;
2019
+ displayName?: string;
2020
+ email?: string;
2021
+ isOptional: boolean;
2022
+ isOrganizer?: boolean;
2023
+ /**
2024
+ * The calendar user's RSVP status
2025
+ */
2026
+ responseStatus?: "needsAction" | "accepted" | "declined" | "tentative";
2027
+ }>;
2028
+ resources?: Array<{
2029
+ displayName?: string;
2030
+ email?: string;
2031
+ isOptional: boolean;
2032
+ /**
2033
+ * The calendar user's RSVP status
2034
+ */
2035
+ responseStatus?: "needsAction" | "accepted" | "declined" | "tentative";
2036
+ }>;
2037
+ colors?: {
2038
+ foreground?: string;
2039
+ background?: string;
2040
+ };
2041
+ attachments?: Array<{
2042
+ url: string;
2043
+ mimeType?: string;
2044
+ title?: string;
2045
+ notionWorkspaceId?: string;
748
2046
  }>;
749
2047
  }>;
750
- /**
751
- * User preferences for calendar data
752
- */
753
- userPreferences: {
2048
+ errors?: Array<{
754
2049
  /**
755
- * Whether the user prefers to display time in 12-hour (AM/PM) or 24-hour format
2050
+ * An identifier for the item that failed (e.g., event summary for creation, event ID for updates/cancellations)
756
2051
  */
757
- timeFormat?: "12_HOUR" | "24_HOUR";
758
- };
759
- errors: Array<{
760
- accountId: string;
761
- calendarId: string;
762
- error: string;
2052
+ identifier: string;
2053
+ /**
2054
+ * Description of the error that occurred
2055
+ */
2056
+ errorMessage: string;
763
2057
  }>;
764
2058
  };
765
2059
  /**
766
- * Script input for the "List the user's scheduling links." effect (`calendar.listSchedulingLinks`),
2060
+ * Script input for the "Update a scheduling link." effect (`calendar.updateSchedulingLink`),
767
2061
  * derived from its Tool Core definition's call_function input projection.
768
2062
  *
769
- * List active, unexpired scheduling links with upcoming time ranges, optionally filtered by link type.
2063
+ * Update an existing active scheduling link by providing its current identity and a patch of requested changes. Omitted patch fields are left unchanged, and nullable patch fields can be cleared with null.
770
2064
  */
771
- export type ListSchedulingLinksScriptInput = {
2065
+ export type UpdateSchedulingLinkScriptInput = {
772
2066
  /**
773
- * Return only scheduling links of this type
2067
+ * Identity of the scheduling link to update. These fields are used only to select and guard the existing link.
774
2068
  */
775
- type?: "singleUse" | "multiUse" | "recurring";
776
- };
777
- /**
778
- * Canonical Tool Core output for the "List the user's scheduling links." effect (`calendar.listSchedulingLinks`).
779
- * This is the definition's output schema; the effect's script surface may
780
- * re-encode it before returning.
781
- */
782
- export type ListSchedulingLinksScriptOutput = {
783
- schedulingLinks: Array<{
2069
+ identity: {
784
2070
  /**
785
- * Unique ID of the created scheduling link
2071
+ * ID of the scheduling link to update
786
2072
  */
787
- id: string;
2073
+ schedulingLinkId: string;
788
2074
  /**
789
- * Short ID used in the scheduling link URL
2075
+ * Current booking calendar for this scheduling link. Used to verify that the agent is updating the intended link.
790
2076
  */
791
- shortId: string;
2077
+ bookingCalendarRef: {
2078
+ /**
2079
+ * Account that owns the current booking calendar.
2080
+ */
2081
+ accountId: string;
2082
+ /**
2083
+ * Current booking calendar identifier within the account.
2084
+ */
2085
+ calendarId: string;
2086
+ };
2087
+ };
2088
+ /**
2089
+ * Patch of changes to apply to the scheduling link. Omitted fields are left unchanged, and nullable fields can be cleared with null.
2090
+ */
2091
+ patch?: {
792
2092
  /**
793
- * Current booking calendar for this scheduling link
2093
+ * Replace the calendar where meetings booked through this scheduling link are created
794
2094
  */
795
- bookingCalendarRef: {
2095
+ bookingCalendar?: {
2096
+ /**
2097
+ * Account that owns the replacement booking calendar.
2098
+ */
796
2099
  accountId: string;
2100
+ /**
2101
+ * Replacement booking calendar identifier within the account.
2102
+ */
797
2103
  calendarId: string;
798
2104
  };
799
2105
  /**
800
- * Custom URL slug for the scheduling link
2106
+ * Replace the calendars checked for conflicts when determining availability
801
2107
  */
802
- alias?: string;
2108
+ conflictCalendars?: Array<{
2109
+ /**
2110
+ * Account that owns the replacement conflict calendar.
2111
+ */
2112
+ accountId: string;
2113
+ /**
2114
+ * Replacement conflict calendar identifier within the account.
2115
+ */
2116
+ calendarId: string;
2117
+ }>;
803
2118
  /**
804
- * The resolved type of the link
2119
+ * Update the scheduling link title. Use null to clear it.
805
2120
  */
806
- type?: "singleUse" | "multiUse" | "recurring";
2121
+ title?: string | null;
807
2122
  /**
808
- * Status of the scheduling link
2123
+ * Update the scheduling link description. Use null to clear it.
2124
+ */
2125
+ description?: string | null;
2126
+ /**
2127
+ * Update the meeting duration in minutes
809
2128
  */
810
- status: string;
811
- title?: string;
812
- description?: string;
813
2129
  duration?: number;
814
2130
  /**
815
- * Full URL where invitees can book a meeting
2131
+ * Replace the scheduling link availability windows
816
2132
  */
817
- schedulingLinkUrl?: string;
818
- timeRanges: Array<{
2133
+ timeRanges?: Array<{
819
2134
  /**
820
2135
  * Start of availability window in ISO 8601 format with timezone offset, e.g. '2024-08-22T09:00:00-04:00'
821
2136
  */
@@ -828,189 +2143,96 @@ export type ListSchedulingLinksScriptOutput = {
828
2143
  * Recurrence rules in RRULE format (e.g., ['RRULE:FREQ=WEEKLY;COUNT=10']). Can also include EXDATE for exception dates (e.g., ['RRULE:FREQ=WEEKLY;COUNT=10', 'EXDATE:2026-03-24T13:00:00']).
829
2144
  */
830
2145
  recurrence?: Array<string>;
831
- /**
832
- * Unique identifier for this time range
833
- */
834
- id: string;
835
2146
  }>;
836
- }>;
837
- };
838
- /**
839
- * Script input for the "Find available meeting times." effect (`calendar.suggestMeetingTimes`),
840
- * derived from its Tool Core definition's call_function input projection.
841
- *
842
- * Analyzes calendar availability for multiple participants and returns ranked time slots when everyone is free.
843
- * Use this when scheduling meetings or finding times that work for a group of people.
844
- * Returns suggestions sorted by preference, showing which participants are available, softly conflicted by an unconfirmed RSVP, busy, or have unknown status for each slot.
845
- */
846
- export type SuggestMeetingTimesScriptInput = {
847
- /**
848
- * Individual participant or group email addresses to find time with. Resolvable groups are expanded into their members.
849
- */
850
- participantEmails: Array<string>;
851
- /**
852
- * The duration of the meeting in minutes
853
- */
854
- durationMinutes: number;
855
- /**
856
- * Start of the time range to consider, as an ISO 8601 date-time.
857
- */
858
- timeMin: string;
859
- /**
860
- * End of the time range to consider, as an ISO 8601 date-time.
861
- */
862
- timeMax: string;
863
- /**
864
- * Maximum number of suggestions to return (default: 10)
865
- */
866
- maxCount?: number;
867
- /**
868
- * Date-times of returned events will be expressed in this time-zone
869
- */
870
- timeZone: string;
871
- /**
872
- * Whether to include participant event schedules in the response
873
- */
874
- includeParticipantSchedules?: boolean;
2147
+ /**
2148
+ * Update the scheduling link type. If omitted while timeRanges are updated, the type is inferred from the new timeRanges.
2149
+ */
2150
+ type?: "singleUse" | "multiUse" | "recurring";
2151
+ /**
2152
+ * Update the custom URL slug for the scheduling link. Must be between 1 and 32 characters.
2153
+ */
2154
+ alias?: string;
2155
+ /**
2156
+ * If true, apply the default conferencing for the effective booking calendar account. If false, clear conferencing.
2157
+ */
2158
+ useDefaultConferencing?: boolean;
2159
+ /**
2160
+ * Update the minimum lead time in minutes. Must be 0 or greater and less than maxLeadTime when both are set. Use null to clear it.
2161
+ */
2162
+ minLeadTime?: number | null;
2163
+ /**
2164
+ * Update the maximum lead time in minutes. Must be greater than 0 and greater than minLeadTime when both are set. Use null to clear it.
2165
+ */
2166
+ maxLeadTime?: number | null;
2167
+ /**
2168
+ * Update the expiration date for the scheduling link. Must be in the future when provided. Use null to clear it.
2169
+ */
2170
+ expirationDate?: string | null;
2171
+ };
875
2172
  };
876
2173
  /**
877
- * Canonical Tool Core output for the "Find available meeting times." effect (`calendar.suggestMeetingTimes`).
2174
+ * Canonical Tool Core output for the "Update a scheduling link." effect (`calendar.updateSchedulingLink`).
878
2175
  * This is the definition's output schema; the effect's script surface may
879
2176
  * re-encode it before returning.
880
2177
  */
881
- export type SuggestMeetingTimesScriptOutput = {
2178
+ export type UpdateSchedulingLinkScriptOutput = {
882
2179
  /**
883
- * Ranked list of available meeting time slots, sorted from most to least preferable. Each slot includes start/end times and categorizes participants by availability status.
2180
+ * The updated scheduling link
884
2181
  */
885
- suggestions: Array<{
886
- /**
887
- * Start time in ISO 8601 format
888
- */
889
- startAt: string;
890
- /**
891
- * End time in ISO 8601 format
892
- */
893
- endAt: string;
2182
+ schedulingLink?: {
894
2183
  /**
895
- * Total number of hard event conflicts, including multiple events for one participant
2184
+ * Unique ID of the created scheduling link
896
2185
  */
897
- hardEventConflictCount: number;
2186
+ id: string;
898
2187
  /**
899
- * Total number of soft event conflicts, including multiple events for one participant
2188
+ * Short ID used in the scheduling link URL
900
2189
  */
901
- softEventConflictCount: number;
2190
+ shortId: string;
902
2191
  /**
903
- * Participant emails for invitees with conflicts with this meeting time
2192
+ * Current booking calendar for this scheduling link
904
2193
  */
905
- unavailableParticipants: Array<string>;
2194
+ bookingCalendarRef: {
2195
+ accountId: string;
2196
+ calendarId: string;
2197
+ };
906
2198
  /**
907
- * Participant emails for invitees who are available for this meeting time
2199
+ * Custom URL slug for the scheduling link
908
2200
  */
909
- availableParticipants: Array<string>;
2201
+ alias?: string;
910
2202
  /**
911
- * Participant emails for invitees with overlapping events whose RSVP is not firm yet
2203
+ * The resolved type of the link
912
2204
  */
913
- softConflictParticipants: Array<string>;
2205
+ type?: "singleUse" | "multiUse" | "recurring";
914
2206
  /**
915
- * Participant emails for invitees with unknown status
2207
+ * Status of the scheduling link
916
2208
  */
917
- unknownStatus: Array<string>;
2209
+ status: string;
2210
+ title?: string;
2211
+ description?: string;
2212
+ duration?: number;
918
2213
  /**
919
- * Readable participant events that overlap this meeting time, including the participant and whether each event creates a hard or soft conflict
2214
+ * Full URL where invitees can book a meeting
920
2215
  */
921
- conflictingEvents: Array<{
922
- participantEmail: string;
923
- eventId: string;
924
- summary?: string;
925
- /**
926
- * What kind of event is it? Standard, out of office, birthday...
927
- */
928
- eventType: "fromGmail" | "default" | "focusTime" | "outOfOffice" | "birthday" | "availability";
929
- /**
930
- * The calendar user's RSVP status
931
- */
932
- responseStatus?: "needsAction" | "accepted" | "declined" | "tentative";
933
- conflictType: "hard" | "soft";
934
- }>;
935
- }>;
936
- /**
937
- * Whether one or more suggestions use a shorter duration than requested because no sufficiently conflict-free times were available at the requested duration
938
- */
939
- usedFlexibleDuration: boolean;
940
- /**
941
- * List of participant schedules, one for each individual participant, including resolved group members. Each schedule includes basic participant information and a list of the participant's calendar events.
942
- */
943
- participantSchedules?: Array<{
944
- accountId: string;
945
- coworkerEmail: string;
946
- profile?: {
947
- displayName?: string;
948
- email?: string;
949
- photoUrl?: string;
950
- };
951
- events: Array<{
952
- eventId: string;
953
- /**
954
- * What kind of event is it? Standard, out of office, birthday...
955
- */
956
- eventType?: "fromGmail" | "default" | "focusTime" | "outOfOffice" | "birthday" | "availability";
957
- /**
958
- * Is an event confirmed, tentative or cancelled? This is different from the user's RSVP
959
- */
960
- eventStatus?: "confirmed" | "tentative" | "cancelled";
961
- summary: string;
2216
+ schedulingLinkUrl?: string;
2217
+ timeRanges: Array<{
962
2218
  /**
963
- * When the event is happening
2219
+ * Start of availability window in ISO 8601 format with timezone offset, e.g. '2024-08-22T09:00:00-04:00'
964
2220
  */
965
- period: {
966
- type: "DATE";
967
- start: {
968
- /**
969
- * Date in ISO 8601 format (no time)
970
- */
971
- date: string;
972
- };
973
- end: {
974
- /**
975
- * Date in ISO 8601 format (no time)
976
- */
977
- date: string;
978
- };
979
- } | {
980
- type: "DATE_TIME";
981
- start: {
982
- /**
983
- * Date-time in ISO 8601 format, in UTC (ending with Z), or with TZ offset
984
- */
985
- dateTime: string;
986
- timeZone?: string;
987
- };
988
- end: {
989
- /**
990
- * Date-time in ISO 8601 format, in UTC (ending with Z), or with TZ offset
991
- */
992
- dateTime: string;
993
- timeZone?: string;
994
- };
995
- };
2221
+ startDate: string;
996
2222
  /**
997
- * The calendar user's RSVP status
2223
+ * End of availability window in ISO 8601 format with timezone offset, e.g. '2024-08-22T17:00:00-04:00'
998
2224
  */
999
- responseStatus?: "needsAction" | "accepted" | "declined" | "tentative";
1000
- colors?: {
1001
- foreground?: string;
1002
- background?: string;
1003
- };
2225
+ endDate: string;
1004
2226
  /**
1005
- * If true, the event does not block time on the calendar. This is equivalent to setting `Show me as to Available` in the Calendar UI.
2227
+ * Recurrence rules in RRULE format (e.g., ['RRULE:FREQ=WEEKLY;COUNT=10']). Can also include EXDATE for exception dates (e.g., ['RRULE:FREQ=WEEKLY;COUNT=10', 'EXDATE:2026-03-24T13:00:00']).
1006
2228
  */
1007
- isTransparent: boolean;
2229
+ recurrence?: Array<string>;
1008
2230
  /**
1009
- * Whether it's a meeting, aka an event with attendees listed
2231
+ * Unique identifier for this time range
1010
2232
  */
1011
- isMeeting: boolean;
2233
+ id: string;
1012
2234
  }>;
1013
- }>;
2235
+ };
1014
2236
  errors?: Array<{
1015
2237
  /**
1016
2238
  * An identifier for the item that failed (e.g., event summary for creation, event ID for updates/cancellations)
@@ -1025,6 +2247,10 @@ export type SuggestMeetingTimesScriptOutput = {
1025
2247
  export declare class CalendarConnectionClient {
1026
2248
  private readonly invoke;
1027
2249
  constructor(invoke: ConnectionActionInvoker);
2250
+ cancelEvents(args: CancelEventsScriptInput): Promise<CancelEventsScriptOutput>;
2251
+ createEvents(args: CreateEventsScriptInput): Promise<CreateEventsScriptOutput>;
2252
+ createSchedulingLink(args: CreateSchedulingLinkScriptInput): Promise<CreateSchedulingLinkScriptOutput>;
2253
+ deleteSchedulingLinks(args: DeleteSchedulingLinksScriptInput): Promise<DeleteSchedulingLinksScriptOutput>;
1028
2254
  listCalendarResources(args: ListCalendarResourcesScriptInput): Promise<ListCalendarResourcesScriptOutput>;
1029
2255
  listCalendars(args: ListCalendarsScriptInput): Promise<ListCalendarsScriptOutput>;
1030
2256
  listContacts(args: ListContactsScriptInput): Promise<ListContactsScriptOutput>;
@@ -1032,5 +2258,7 @@ export declare class CalendarConnectionClient {
1032
2258
  listEvents(args: ListEventsScriptInput): Promise<ListEventsScriptOutput>;
1033
2259
  listSchedulingLinks(args: ListSchedulingLinksScriptInput): Promise<ListSchedulingLinksScriptOutput>;
1034
2260
  suggestMeetingTimes(args: SuggestMeetingTimesScriptInput): Promise<SuggestMeetingTimesScriptOutput>;
2261
+ updateEvents(args: UpdateEventsScriptInput): Promise<UpdateEventsScriptOutput>;
2262
+ updateSchedulingLink(args: UpdateSchedulingLinkScriptInput): Promise<UpdateSchedulingLinkScriptOutput>;
1035
2263
  }
1036
2264
  //# sourceMappingURL=calendar.generated.d.ts.map