universal-mcp 0.1.7rc2__py3-none-any.whl → 0.1.8__py3-none-any.whl

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.
Files changed (61) hide show
  1. universal_mcp/__init__.py +0 -2
  2. universal_mcp/analytics.py +75 -0
  3. universal_mcp/applications/ahrefs/README.md +76 -0
  4. universal_mcp/applications/ahrefs/app.py +2291 -0
  5. universal_mcp/applications/application.py +95 -5
  6. universal_mcp/applications/calendly/README.md +78 -0
  7. universal_mcp/applications/calendly/__init__.py +0 -0
  8. universal_mcp/applications/calendly/app.py +1195 -0
  9. universal_mcp/applications/coda/README.md +133 -0
  10. universal_mcp/applications/coda/__init__.py +0 -0
  11. universal_mcp/applications/coda/app.py +3671 -0
  12. universal_mcp/applications/e2b/app.py +14 -35
  13. universal_mcp/applications/figma/README.md +74 -0
  14. universal_mcp/applications/figma/__init__.py +0 -0
  15. universal_mcp/applications/figma/app.py +1261 -0
  16. universal_mcp/applications/firecrawl/app.py +29 -32
  17. universal_mcp/applications/github/app.py +127 -85
  18. universal_mcp/applications/google_calendar/app.py +62 -138
  19. universal_mcp/applications/google_docs/app.py +47 -52
  20. universal_mcp/applications/google_drive/app.py +119 -113
  21. universal_mcp/applications/google_mail/app.py +124 -50
  22. universal_mcp/applications/google_sheet/app.py +89 -91
  23. universal_mcp/applications/markitdown/app.py +9 -8
  24. universal_mcp/applications/notion/app.py +254 -134
  25. universal_mcp/applications/perplexity/app.py +13 -45
  26. universal_mcp/applications/reddit/app.py +94 -85
  27. universal_mcp/applications/resend/app.py +12 -23
  28. universal_mcp/applications/{serp → serpapi}/app.py +14 -33
  29. universal_mcp/applications/tavily/app.py +11 -28
  30. universal_mcp/applications/wrike/README.md +71 -0
  31. universal_mcp/applications/wrike/__init__.py +0 -0
  32. universal_mcp/applications/wrike/app.py +1372 -0
  33. universal_mcp/applications/youtube/README.md +82 -0
  34. universal_mcp/applications/youtube/__init__.py +0 -0
  35. universal_mcp/applications/youtube/app.py +1428 -0
  36. universal_mcp/applications/zenquotes/app.py +12 -2
  37. universal_mcp/exceptions.py +9 -2
  38. universal_mcp/integrations/__init__.py +24 -1
  39. universal_mcp/integrations/agentr.py +27 -4
  40. universal_mcp/integrations/integration.py +143 -30
  41. universal_mcp/logger.py +3 -56
  42. universal_mcp/servers/__init__.py +6 -14
  43. universal_mcp/servers/server.py +201 -146
  44. universal_mcp/stores/__init__.py +7 -2
  45. universal_mcp/stores/store.py +103 -40
  46. universal_mcp/tools/__init__.py +3 -0
  47. universal_mcp/tools/adapters.py +43 -0
  48. universal_mcp/tools/func_metadata.py +213 -0
  49. universal_mcp/tools/tools.py +342 -0
  50. universal_mcp/utils/docgen.py +325 -119
  51. universal_mcp/utils/docstring_parser.py +179 -0
  52. universal_mcp/utils/dump_app_tools.py +33 -23
  53. universal_mcp/utils/installation.py +199 -8
  54. universal_mcp/utils/openapi.py +229 -46
  55. {universal_mcp-0.1.7rc2.dist-info → universal_mcp-0.1.8.dist-info}/METADATA +9 -5
  56. universal_mcp-0.1.8.dist-info/RECORD +81 -0
  57. universal_mcp-0.1.7rc2.dist-info/RECORD +0 -58
  58. /universal_mcp/{utils/bridge.py → applications/ahrefs/__init__.py} +0 -0
  59. /universal_mcp/applications/{serp → serpapi}/README.md +0 -0
  60. {universal_mcp-0.1.7rc2.dist-info → universal_mcp-0.1.8.dist-info}/WHEEL +0 -0
  61. {universal_mcp-0.1.7rc2.dist-info → universal_mcp-0.1.8.dist-info}/entry_points.txt +0 -0
@@ -0,0 +1,1195 @@
1
+ from typing import Any
2
+
3
+ from universal_mcp.applications import APIApplication
4
+ from universal_mcp.integrations import Integration
5
+
6
+
7
+ class CalendlyApp(APIApplication):
8
+ def __init__(self, integration: Integration = None, **kwargs) -> None:
9
+ """
10
+ Initializes a new instance of the Calendly API application with the specified integration and additional configuration options.
11
+
12
+ Args:
13
+ integration: An optional Integration object to associate with the Calendly API application. Defaults to None.
14
+ **kwargs: Arbitrary keyword arguments that are passed to the superclass initializer for additional configuration.
15
+
16
+ Returns:
17
+ None
18
+ """
19
+ super().__init__(name="calendly", integration=integration, **kwargs)
20
+ self.base_url = "https://api.calendly.com"
21
+
22
+ def list_event_invitees(
23
+ self, uuid, status=None, sort=None, email=None, page_token=None, count=None
24
+ ) -> dict[str, Any]:
25
+ """
26
+ Retrieves a list of invitees for a specific scheduled event, optionally filtered and paginated by status, email, sorting order, and paging parameters.
27
+
28
+ Args:
29
+ uuid: str. The unique identifier of the scheduled event for which to list invitees.
30
+ status: Optional[str]. Filter invitees by their invitation status (e.g., accepted, declined, pending).
31
+ sort: Optional[str]. Sorting order of the invitees list (e.g., by name or date).
32
+ email: Optional[str]. Filter invitees by their email address.
33
+ page_token: Optional[str]. A token indicating the page of results to retrieve for pagination.
34
+ count: Optional[int]. The maximum number of invitees to return per page.
35
+
36
+ Returns:
37
+ dict[str, Any]: A dictionary containing the list of event invitees and pagination details, as returned by the API.
38
+ """
39
+ if uuid is None:
40
+ raise ValueError("Missing required parameter 'uuid'")
41
+ url = f"{self.base_url}/scheduled_events/{uuid}/invitees"
42
+ query_params = {
43
+ k: v
44
+ for k, v in [
45
+ ("status", status),
46
+ ("sort", sort),
47
+ ("email", email),
48
+ ("page_token", page_token),
49
+ ("count", count),
50
+ ]
51
+ if v is not None
52
+ }
53
+ response = self._get(url, params=query_params)
54
+ response.raise_for_status()
55
+ return response.json()
56
+
57
+ def get_event(self, uuid) -> dict[str, Any]:
58
+ """
59
+ Retrieves the details of a scheduled event given its UUID.
60
+
61
+ Args:
62
+ uuid: str. The unique identifier of the scheduled event to retrieve.
63
+
64
+ Returns:
65
+ dict[str, Any]: A dictionary containing the scheduled event details as returned by the API.
66
+ """
67
+ if uuid is None:
68
+ raise ValueError("Missing required parameter 'uuid'")
69
+ url = f"{self.base_url}/scheduled_events/{uuid}"
70
+ query_params = {}
71
+ response = self._get(url, params=query_params)
72
+ response.raise_for_status()
73
+ return response.json()
74
+
75
+ def get_event_invitee(self, event_uuid, invitee_uuid) -> dict[str, Any]:
76
+ """
77
+ Retrieves details about a specific invitee for a given scheduled event.
78
+
79
+ Args:
80
+ event_uuid: The unique identifier of the scheduled event.
81
+ invitee_uuid: The unique identifier of the invitee to retrieve.
82
+
83
+ Returns:
84
+ A dictionary containing invitee details as returned by the API.
85
+ """
86
+ if event_uuid is None:
87
+ raise ValueError("Missing required parameter 'event_uuid'")
88
+ if invitee_uuid is None:
89
+ raise ValueError("Missing required parameter 'invitee_uuid'")
90
+ url = f"{self.base_url}/scheduled_events/{event_uuid}/invitees/{invitee_uuid}"
91
+ query_params = {}
92
+ response = self._get(url, params=query_params)
93
+ response.raise_for_status()
94
+ return response.json()
95
+
96
+ def list_events(
97
+ self,
98
+ user=None,
99
+ organization=None,
100
+ invitee_email=None,
101
+ status=None,
102
+ sort=None,
103
+ min_start_time=None,
104
+ max_start_time=None,
105
+ page_token=None,
106
+ count=None,
107
+ group=None,
108
+ ) -> dict[str, Any]:
109
+ """
110
+ Retrieves a list of scheduled events filtered by optional user, organization, invitee email, status, date range, sorting, and pagination criteria.
111
+
112
+ Args:
113
+ user: Optional[str]: The user identifier to filter events by a specific user.
114
+ organization: Optional[str]: The organization identifier to filter events by a specific organization.
115
+ invitee_email: Optional[str]: The email address of the invitee to filter events.
116
+ status: Optional[str]: The status to filter events (e.g., 'scheduled', 'cancelled').
117
+ sort: Optional[str]: Sorting criteria for the events (e.g., by start time).
118
+ min_start_time: Optional[str]: Minimum start time (ISO 8601 format) to filter events.
119
+ max_start_time: Optional[str]: Maximum start time (ISO 8601 format) to filter events.
120
+ page_token: Optional[str]: Token for fetching the next page of results.
121
+ count: Optional[int]: The maximum number of events to return.
122
+ group: Optional[str]: Group identifier to filter events by group.
123
+
124
+ Returns:
125
+ dict[str, Any]: A dictionary containing the list of scheduled events and associated metadata.
126
+ """
127
+ url = f"{self.base_url}/scheduled_events"
128
+ query_params = {
129
+ k: v
130
+ for k, v in [
131
+ ("user", user),
132
+ ("organization", organization),
133
+ ("invitee_email", invitee_email),
134
+ ("status", status),
135
+ ("sort", sort),
136
+ ("min_start_time", min_start_time),
137
+ ("max_start_time", max_start_time),
138
+ ("page_token", page_token),
139
+ ("count", count),
140
+ ("group", group),
141
+ ]
142
+ if v is not None
143
+ }
144
+ response = self._get(url, params=query_params)
145
+ response.raise_for_status()
146
+ return response.json()
147
+
148
+ def get_event_type(self, uuid) -> dict[str, Any]:
149
+ """
150
+ Retrieves the event type details for the specified UUID from the API.
151
+
152
+ Args:
153
+ uuid: str. The unique identifier of the event type to retrieve.
154
+
155
+ Returns:
156
+ dict. A dictionary containing the event type details as returned by the API.
157
+ """
158
+ if uuid is None:
159
+ raise ValueError("Missing required parameter 'uuid'")
160
+ url = f"{self.base_url}/event_types/{uuid}"
161
+ query_params = {}
162
+ response = self._get(url, params=query_params)
163
+ response.raise_for_status()
164
+ return response.json()
165
+
166
+ def list_user_sevent_types(
167
+ self,
168
+ active=None,
169
+ organization=None,
170
+ user=None,
171
+ user_availability_schedule=None,
172
+ sort=None,
173
+ admin_managed=None,
174
+ page_token=None,
175
+ count=None,
176
+ ) -> dict[str, Any]:
177
+ """
178
+ Retrieves a list of user event types with optional filtering, sorting, and pagination parameters.
179
+
180
+ Args:
181
+ active: Optional; filter event types by active status (bool or compatible).
182
+ organization: Optional; filter event types by organization identifier.
183
+ user: Optional; filter event types by user identifier.
184
+ user_availability_schedule: Optional; filter by user availability schedule identifier.
185
+ sort: Optional; comma-separated string or list for sorting results.
186
+ admin_managed: Optional; filter event types managed by an admin (bool or compatible).
187
+ page_token: Optional; token for paginating through result pages.
188
+ count: Optional; maximum number of event types to return.
189
+
190
+ Returns:
191
+ A dictionary containing the list of user event types and associated pagination or metadata information.
192
+ """
193
+ url = f"{self.base_url}/event_types"
194
+ query_params = {
195
+ k: v
196
+ for k, v in [
197
+ ("active", active),
198
+ ("organization", organization),
199
+ ("user", user),
200
+ ("user_availability_schedule", user_availability_schedule),
201
+ ("sort", sort),
202
+ ("admin_managed", admin_managed),
203
+ ("page_token", page_token),
204
+ ("count", count),
205
+ ]
206
+ if v is not None
207
+ }
208
+ response = self._get(url, params=query_params)
209
+ response.raise_for_status()
210
+ return response.json()
211
+
212
+ def get_user(self, uuid) -> dict[str, Any]:
213
+ """
214
+ Retrieves detailed user information for a given UUID from the remote API.
215
+
216
+ Args:
217
+ uuid: The unique identifier (UUID) of the user to retrieve.
218
+
219
+ Returns:
220
+ A dictionary containing the user's details as returned by the API.
221
+ """
222
+ if uuid is None:
223
+ raise ValueError("Missing required parameter 'uuid'")
224
+ url = f"{self.base_url}/users/{uuid}"
225
+ query_params = {}
226
+ response = self._get(url, params=query_params)
227
+ response.raise_for_status()
228
+ return response.json()
229
+
230
+ def get_current_user(
231
+ self,
232
+ ) -> dict[str, Any]:
233
+ """
234
+ Retrieves information about the currently authenticated user from the API.
235
+
236
+ Args:
237
+ self: Instance of the class containing API connection details and HTTP methods.
238
+
239
+ Returns:
240
+ A dictionary containing the current user's information as returned by the API.
241
+ """
242
+ url = f"{self.base_url}/users/me"
243
+ query_params = {}
244
+ response = self._get(url, params=query_params)
245
+ response.raise_for_status()
246
+ return response.json()
247
+
248
+ def list_organization_invitations(
249
+ self, uuid, count=None, page_token=None, sort=None, email=None, status=None
250
+ ) -> dict[str, Any]:
251
+ """
252
+ Retrieves a paginated list of invitations for a specified organization, with optional filtering and sorting.
253
+
254
+ Args:
255
+ uuid: str. Unique identifier of the organization whose invitations are to be listed.
256
+ count: Optional[int]. Maximum number of invitations to return per page.
257
+ page_token: Optional[str]. Token indicating the page of results to retrieve.
258
+ sort: Optional[str]. Sorting criteria for the invitations (e.g., by date or status).
259
+ email: Optional[str]. Filter invitations sent to a specific email address.
260
+ status: Optional[str]. Filter invitations by their status (e.g., pending, accepted, expired).
261
+
262
+ Returns:
263
+ dict[str, Any]: A dictionary containing the list of organization invitations and pagination information.
264
+ """
265
+ if uuid is None:
266
+ raise ValueError("Missing required parameter 'uuid'")
267
+ url = f"{self.base_url}/organizations/{uuid}/invitations"
268
+ query_params = {
269
+ k: v
270
+ for k, v in [
271
+ ("count", count),
272
+ ("page_token", page_token),
273
+ ("sort", sort),
274
+ ("email", email),
275
+ ("status", status),
276
+ ]
277
+ if v is not None
278
+ }
279
+ response = self._get(url, params=query_params)
280
+ response.raise_for_status()
281
+ return response.json()
282
+
283
+ def invite_user_to_organization(self, uuid, email=None) -> dict[str, Any]:
284
+ """
285
+ Sends an invitation to a specified email address to join an organization identified by its UUID.
286
+
287
+ Args:
288
+ uuid: str. The unique identifier of the organization to which the user is being invited.
289
+ email: Optional[str]. The email address of the user to invite. If None, the invite is created without an email.
290
+
291
+ Returns:
292
+ dict[str, Any]. A dictionary containing the JSON response from the API after sending the invitation.
293
+ """
294
+ if uuid is None:
295
+ raise ValueError("Missing required parameter 'uuid'")
296
+ request_body = {
297
+ "email": email,
298
+ }
299
+ request_body = {k: v for k, v in request_body.items() if v is not None}
300
+ url = f"{self.base_url}/organizations/{uuid}/invitations"
301
+ query_params = {}
302
+ response = self._post(url, data=request_body, params=query_params)
303
+ response.raise_for_status()
304
+ return response.json()
305
+
306
+ def get_organization_invitation(self, org_uuid, uuid) -> dict[str, Any]:
307
+ """
308
+ Retrieves a specific invitation for an organization using its unique identifiers.
309
+
310
+ Args:
311
+ org_uuid: str. The unique identifier of the organization whose invitation is to be retrieved.
312
+ uuid: str. The unique identifier of the invitation to fetch.
313
+
314
+ Returns:
315
+ dict. A dictionary containing the invitation details as returned by the API.
316
+ """
317
+ if org_uuid is None:
318
+ raise ValueError("Missing required parameter 'org_uuid'")
319
+ if uuid is None:
320
+ raise ValueError("Missing required parameter 'uuid'")
321
+ url = f"{self.base_url}/organizations/{org_uuid}/invitations/{uuid}"
322
+ query_params = {}
323
+ response = self._get(url, params=query_params)
324
+ response.raise_for_status()
325
+ return response.json()
326
+
327
+ def revoke_user_sorganization_invitation(self, org_uuid, uuid) -> Any:
328
+ """
329
+ Revokes a user's invitation to an organization by deleting the specified invitation resource.
330
+
331
+ Args:
332
+ org_uuid: The unique identifier of the organization from which the user's invitation will be revoked.
333
+ uuid: The unique identifier of the invitation to be revoked.
334
+
335
+ Returns:
336
+ The JSON response from the API after successfully revoking the invitation.
337
+ """
338
+ if org_uuid is None:
339
+ raise ValueError("Missing required parameter 'org_uuid'")
340
+ if uuid is None:
341
+ raise ValueError("Missing required parameter 'uuid'")
342
+ url = f"{self.base_url}/organizations/{org_uuid}/invitations/{uuid}"
343
+ query_params = {}
344
+ response = self._delete(url, params=query_params)
345
+ response.raise_for_status()
346
+ return response.json()
347
+
348
+ def get_organization_membership(self, uuid) -> dict[str, Any]:
349
+ """
350
+ Retrieves the membership information for a specified organization membership UUID.
351
+
352
+ Args:
353
+ uuid: str. The unique identifier of the organization membership to retrieve.
354
+
355
+ Returns:
356
+ dict. A dictionary containing the organization membership details as returned by the API.
357
+ """
358
+ if uuid is None:
359
+ raise ValueError("Missing required parameter 'uuid'")
360
+ url = f"{self.base_url}/organization_memberships/{uuid}"
361
+ query_params = {}
362
+ response = self._get(url, params=query_params)
363
+ response.raise_for_status()
364
+ return response.json()
365
+
366
+ def remove_user_from_organization(self, uuid) -> Any:
367
+ """
368
+ Removes a user from the organization by deleting their membership using the specified UUID.
369
+
370
+ Args:
371
+ uuid: str. The unique identifier of the organization membership to remove.
372
+
373
+ Returns:
374
+ dict. The response data from the organization membership removal request.
375
+ """
376
+ if uuid is None:
377
+ raise ValueError("Missing required parameter 'uuid'")
378
+ url = f"{self.base_url}/organization_memberships/{uuid}"
379
+ query_params = {}
380
+ response = self._delete(url, params=query_params)
381
+ response.raise_for_status()
382
+ return response.json()
383
+
384
+ def list_organization_memberships(
385
+ self, page_token=None, count=None, email=None, organization=None, user=None
386
+ ) -> dict[str, Any]:
387
+ """
388
+ Retrieves a list of organization memberships, optionally filtered by pagination, email, organization, or user parameters.
389
+
390
+ Args:
391
+ page_token: Optional; A string token to specify the page of results to retrieve for pagination.
392
+ count: Optional; An integer specifying the maximum number of memberships to return.
393
+ email: Optional; A string to filter memberships by user email address.
394
+ organization: Optional; A string to filter memberships by organization identifier.
395
+ user: Optional; A string to filter memberships by user identifier.
396
+
397
+ Returns:
398
+ A dictionary containing the organization membership data returned by the API.
399
+ """
400
+ url = f"{self.base_url}/organization_memberships"
401
+ query_params = {
402
+ k: v
403
+ for k, v in [
404
+ ("page_token", page_token),
405
+ ("count", count),
406
+ ("email", email),
407
+ ("organization", organization),
408
+ ("user", user),
409
+ ]
410
+ if v is not None
411
+ }
412
+ response = self._get(url, params=query_params)
413
+ response.raise_for_status()
414
+ return response.json()
415
+
416
+ def get_webhook_subscription(self, webhook_uuid) -> dict[str, Any]:
417
+ """
418
+ Retrieves the details of a webhook subscription identified by its UUID.
419
+
420
+ Args:
421
+ webhook_uuid: The unique identifier (UUID) of the webhook subscription to retrieve.
422
+
423
+ Returns:
424
+ A dictionary containing the webhook subscription details as returned by the API.
425
+ """
426
+ if webhook_uuid is None:
427
+ raise ValueError("Missing required parameter 'webhook_uuid'")
428
+ url = f"{self.base_url}/webhook_subscriptions/{webhook_uuid}"
429
+ query_params = {}
430
+ response = self._get(url, params=query_params)
431
+ response.raise_for_status()
432
+ return response.json()
433
+
434
+ def delete_webhook_subscription(self, webhook_uuid) -> Any:
435
+ """
436
+ Deletes a webhook subscription identified by its UUID.
437
+
438
+ Args:
439
+ webhook_uuid: The unique identifier (UUID) of the webhook subscription to delete.
440
+
441
+ Returns:
442
+ The JSON-decoded response from the server after deleting the webhook subscription.
443
+ """
444
+ if webhook_uuid is None:
445
+ raise ValueError("Missing required parameter 'webhook_uuid'")
446
+ url = f"{self.base_url}/webhook_subscriptions/{webhook_uuid}"
447
+ query_params = {}
448
+ response = self._delete(url, params=query_params)
449
+ response.raise_for_status()
450
+ return response.json()
451
+
452
+ def list_webhook_subscriptions(
453
+ self,
454
+ organization=None,
455
+ user=None,
456
+ page_token=None,
457
+ count=None,
458
+ sort=None,
459
+ scope=None,
460
+ ) -> dict[str, Any]:
461
+ """
462
+ Retrieves a list of webhook subscriptions, optionally filtered and paginated based on input criteria.
463
+
464
+ Args:
465
+ organization: Optional; str or None. Identifier of the organization to filter subscriptions by organization.
466
+ user: Optional; str or None. Identifier of the user to filter subscriptions created by a specific user.
467
+ page_token: Optional; str or None. Token to retrieve a specific page of results for pagination.
468
+ count: Optional; int or None. Maximum number of subscriptions to return in the response.
469
+ sort: Optional; str or None. Sorting order for the returned subscriptions.
470
+ scope: Optional; str or None. Scope to filter webhook subscriptions.
471
+
472
+ Returns:
473
+ dict: A dictionary containing the list of webhook subscriptions matching the query parameters and any associated metadata (e.g., paging info).
474
+ """
475
+ url = f"{self.base_url}/webhook_subscriptions"
476
+ query_params = {
477
+ k: v
478
+ for k, v in [
479
+ ("organization", organization),
480
+ ("user", user),
481
+ ("page_token", page_token),
482
+ ("count", count),
483
+ ("sort", sort),
484
+ ("scope", scope),
485
+ ]
486
+ if v is not None
487
+ }
488
+ response = self._get(url, params=query_params)
489
+ response.raise_for_status()
490
+ return response.json()
491
+
492
+ def create_webhook_subscription(
493
+ self,
494
+ events=None,
495
+ group=None,
496
+ organization=None,
497
+ scope=None,
498
+ signing_key=None,
499
+ url=None,
500
+ user=None,
501
+ ) -> dict[str, Any]:
502
+ """
503
+ Creates a new webhook subscription with the specified parameters and returns the subscription details as a dictionary.
504
+
505
+ Args:
506
+ events: Optional[list[str]]; A list of event names that will trigger the webhook.
507
+ group: Optional[str]; The group identifier to which the webhook is scoped.
508
+ organization: Optional[str]; The organization identifier for the webhook subscription.
509
+ scope: Optional[str]; The scope within which the webhook is active.
510
+ signing_key: Optional[str]; The key used to sign webhook payloads for verification.
511
+ url: Optional[str]; The URL endpoint to which the webhook events will be delivered.
512
+ user: Optional[str]; The user identifier associated with this webhook subscription.
513
+
514
+ Returns:
515
+ dict[str, Any]: A dictionary containing the details of the created webhook subscription as returned by the API.
516
+ """
517
+ request_body = {
518
+ "events": events,
519
+ "group": group,
520
+ "organization": organization,
521
+ "scope": scope,
522
+ "signing_key": signing_key,
523
+ "url": url,
524
+ "user": user,
525
+ }
526
+ request_body = {k: v for k, v in request_body.items() if v is not None}
527
+ url = f"{self.base_url}/webhook_subscriptions"
528
+ query_params = {}
529
+ response = self._post(url, data=request_body, params=query_params)
530
+ response.raise_for_status()
531
+ return response.json()
532
+
533
+ def create_single_use_scheduling_link(
534
+ self, max_event_count=None, owner=None, owner_type=None
535
+ ) -> dict[str, Any]:
536
+ """
537
+ Creates a single-use scheduling link by sending a POST request with optional restrictions.
538
+
539
+ Args:
540
+ max_event_count: Optional; int or None. The maximum number of events that can be scheduled using the link.
541
+ owner: Optional; str or None. The identifier for the owner of the scheduling link.
542
+ owner_type: Optional; str or None. The type of the owner (e.g., 'user', 'team').
543
+
544
+ Returns:
545
+ dict[str, Any]: The response data from the scheduling link creation API as a dictionary.
546
+ """
547
+ request_body = {
548
+ "max_event_count": max_event_count,
549
+ "owner": owner,
550
+ "owner_type": owner_type,
551
+ }
552
+ request_body = {k: v for k, v in request_body.items() if v is not None}
553
+ url = f"{self.base_url}/scheduling_links"
554
+ query_params = {}
555
+ response = self._post(url, data=request_body, params=query_params)
556
+ response.raise_for_status()
557
+ return response.json()
558
+
559
+ def delete_invitee_data(self, emails=None) -> dict[str, Any]:
560
+ """
561
+ Deletes invitee data for the specified email addresses by sending a POST request to the data compliance API.
562
+
563
+ Args:
564
+ emails: Optional list of email addresses (list[str] or None) to identify the invitees whose data should be deleted. If None, no emails are included in the request.
565
+
566
+ Returns:
567
+ A dictionary containing the JSON response from the API indicating the result of the deletion request.
568
+ """
569
+ request_body = {
570
+ "emails": emails,
571
+ }
572
+ request_body = {k: v for k, v in request_body.items() if v is not None}
573
+ url = f"{self.base_url}/data_compliance/deletion/invitees"
574
+ query_params = {}
575
+ response = self._post(url, data=request_body, params=query_params)
576
+ response.raise_for_status()
577
+ return response.json()
578
+
579
+ def delete_scheduled_event_data(
580
+ self, end_time=None, start_time=None
581
+ ) -> dict[str, Any]:
582
+ """
583
+ Deletes scheduled event data within the specified time range by sending a deletion request to the data compliance service.
584
+
585
+ Args:
586
+ end_time: Optional; The end of the time interval for which scheduled event data should be deleted. If None, no upper bound is set.
587
+ start_time: Optional; The start of the time interval for which scheduled event data should be deleted. If None, no lower bound is set.
588
+
589
+ Returns:
590
+ A dictionary containing the response from the data compliance deletion endpoint.
591
+ """
592
+ request_body = {
593
+ "end_time": end_time,
594
+ "start_time": start_time,
595
+ }
596
+ request_body = {k: v for k, v in request_body.items() if v is not None}
597
+ url = f"{self.base_url}/data_compliance/deletion/events"
598
+ query_params = {}
599
+ response = self._post(url, data=request_body, params=query_params)
600
+ response.raise_for_status()
601
+ return response.json()
602
+
603
+ def get_invitee_no_show(self, uuid) -> dict[str, Any]:
604
+ """
605
+ Retrieves details about an invitee who did not show up for a scheduled event, identified by a unique UUID.
606
+
607
+ Args:
608
+ uuid: The unique identifier (UUID) of the invitee no-show to retrieve.
609
+
610
+ Returns:
611
+ A dictionary containing details of the invitee no-show record.
612
+ """
613
+ if uuid is None:
614
+ raise ValueError("Missing required parameter 'uuid'")
615
+ url = f"{self.base_url}/invitee_no_shows/{uuid}"
616
+ query_params = {}
617
+ response = self._get(url, params=query_params)
618
+ response.raise_for_status()
619
+ return response.json()
620
+
621
+ def delete_invitee_no_show(self, uuid) -> Any:
622
+ """
623
+ Deletes an invitee no-show record identified by the given UUID.
624
+
625
+ Args:
626
+ uuid: The unique identifier (UUID) of the invitee no-show to delete. Must not be None.
627
+
628
+ Returns:
629
+ The response data as a JSON object after successfully deleting the invitee no-show record.
630
+ """
631
+ if uuid is None:
632
+ raise ValueError("Missing required parameter 'uuid'")
633
+ url = f"{self.base_url}/invitee_no_shows/{uuid}"
634
+ query_params = {}
635
+ response = self._delete(url, params=query_params)
636
+ response.raise_for_status()
637
+ return response.json()
638
+
639
+ def create_invitee_no_show(self, invitee=None) -> dict[str, Any]:
640
+ """
641
+ Creates an invitee no-show record by sending a POST request to the invitee_no_shows endpoint.
642
+
643
+ Args:
644
+ invitee: Optional; information about the invitee to be included in the request body. If None, the invitee field is omitted.
645
+
646
+ Returns:
647
+ A dictionary containing the server's JSON response to the creation request.
648
+ """
649
+ request_body = {
650
+ "invitee": invitee,
651
+ }
652
+ request_body = {k: v for k, v in request_body.items() if v is not None}
653
+ url = f"{self.base_url}/invitee_no_shows"
654
+ query_params = {}
655
+ response = self._post(url, data=request_body, params=query_params)
656
+ response.raise_for_status()
657
+ return response.json()
658
+
659
+ def get_group(self, uuid) -> dict[str, Any]:
660
+ """
661
+ Retrieves information for a group identified by its UUID from the server.
662
+
663
+ Args:
664
+ uuid: The unique identifier (UUID) of the group to retrieve.
665
+
666
+ Returns:
667
+ A dictionary containing the group's details as returned by the server.
668
+ """
669
+ if uuid is None:
670
+ raise ValueError("Missing required parameter 'uuid'")
671
+ url = f"{self.base_url}/groups/{uuid}"
672
+ query_params = {}
673
+ response = self._get(url, params=query_params)
674
+ response.raise_for_status()
675
+ return response.json()
676
+
677
+ def list_groups(
678
+ self, organization=None, page_token=None, count=None
679
+ ) -> dict[str, Any]:
680
+ """
681
+ Retrieves a list of groups from the API, optionally filtered by organization and paginated using a page token and count.
682
+
683
+ Args:
684
+ organization: Optional; a string specifying the organization to filter the groups by.
685
+ page_token: Optional; a string token indicating the page of results to retrieve for pagination.
686
+ count: Optional; an integer specifying the maximum number of groups to return.
687
+
688
+ Returns:
689
+ A dictionary containing the JSON response from the API with the list of groups and any relevant pagination details.
690
+ """
691
+ url = f"{self.base_url}/groups"
692
+ query_params = {
693
+ k: v
694
+ for k, v in [
695
+ ("organization", organization),
696
+ ("page_token", page_token),
697
+ ("count", count),
698
+ ]
699
+ if v is not None
700
+ }
701
+ response = self._get(url, params=query_params)
702
+ response.raise_for_status()
703
+ return response.json()
704
+
705
+ def get_group_relationship(self, uuid) -> dict[str, Any]:
706
+ """
707
+ Retrieves the relationship information for a group specified by UUID from the API.
708
+
709
+ Args:
710
+ uuid: The unique identifier (UUID) of the group whose relationship data is to be retrieved.
711
+
712
+ Returns:
713
+ A dictionary containing the group relationship information as returned by the API.
714
+ """
715
+ if uuid is None:
716
+ raise ValueError("Missing required parameter 'uuid'")
717
+ url = f"{self.base_url}/group_relationships/{uuid}"
718
+ query_params = {}
719
+ response = self._get(url, params=query_params)
720
+ response.raise_for_status()
721
+ return response.json()
722
+
723
+ def list_group_relationships(
724
+ self, count=None, page_token=None, organization=None, owner=None, group=None
725
+ ) -> dict[str, Any]:
726
+ """
727
+ Retrieves a list of group relationships from the server, optionally filtered by pagination and various group ownership parameters.
728
+
729
+ Args:
730
+ count: Optional; Maximum number of records to retrieve. Used for pagination.
731
+ page_token: Optional; Token indicating the page of results to retrieve. Used for pagination.
732
+ organization: Optional; Filter relationships to a specific organization.
733
+ owner: Optional; Filter relationships by the owner's identifier.
734
+ group: Optional; Filter relationships by the group's identifier.
735
+
736
+ Returns:
737
+ A dictionary containing the JSON response from the server, typically including metadata and a list of group relationships.
738
+ """
739
+ url = f"{self.base_url}/group_relationships"
740
+ query_params = {
741
+ k: v
742
+ for k, v in [
743
+ ("count", count),
744
+ ("page_token", page_token),
745
+ ("organization", organization),
746
+ ("owner", owner),
747
+ ("group", group),
748
+ ]
749
+ if v is not None
750
+ }
751
+ response = self._get(url, params=query_params)
752
+ response.raise_for_status()
753
+ return response.json()
754
+
755
+ def get_routing_form(self, uuid) -> dict[str, Any]:
756
+ """
757
+ Retrieves a routing form by its unique identifier from the server.
758
+
759
+ Args:
760
+ uuid: The unique identifier of the routing form to retrieve.
761
+
762
+ Returns:
763
+ A dictionary representing the routing form data retrieved from the server.
764
+ """
765
+ if uuid is None:
766
+ raise ValueError("Missing required parameter 'uuid'")
767
+ url = f"{self.base_url}/routing_forms/{uuid}"
768
+ query_params = {}
769
+ response = self._get(url, params=query_params)
770
+ response.raise_for_status()
771
+ return response.json()
772
+
773
+ def list_routing_forms(
774
+ self, organization=None, count=None, page_token=None, sort=None
775
+ ) -> dict[str, Any]:
776
+ """
777
+ Retrieves a paginated list of routing forms from the API, optionally filtered and sorted by organization, count, page token, or sort order.
778
+
779
+ Args:
780
+ organization: Optional[str]. The organization identifier to filter the routing forms by. If None, no filtering by organization is applied.
781
+ count: Optional[int]. The maximum number of routing forms to return. If None, the default API pagination size is used.
782
+ page_token: Optional[str]. A token indicating the page of results to retrieve for pagination. If None, retrieves the first page.
783
+ sort: Optional[str]. The sorting order to apply to the results. If None, uses the API's default sorting.
784
+
785
+ Returns:
786
+ dict[str, Any]: A dictionary containing the list of routing forms and associated metadata as provided by the API response.
787
+ """
788
+ url = f"{self.base_url}/routing_forms"
789
+ query_params = {
790
+ k: v
791
+ for k, v in [
792
+ ("organization", organization),
793
+ ("count", count),
794
+ ("page_token", page_token),
795
+ ("sort", sort),
796
+ ]
797
+ if v is not None
798
+ }
799
+ response = self._get(url, params=query_params)
800
+ response.raise_for_status()
801
+ return response.json()
802
+
803
+ def get_routing_form_submission(self, uuid) -> dict[str, Any]:
804
+ """
805
+ Retrieves a routing form submission by its unique identifier (UUID) from the configured API endpoint.
806
+
807
+ Args:
808
+ uuid: The unique identifier of the routing form submission to retrieve. Must not be None.
809
+
810
+ Returns:
811
+ A dictionary containing the routing form submission data retrieved from the API.
812
+ """
813
+ if uuid is None:
814
+ raise ValueError("Missing required parameter 'uuid'")
815
+ url = f"{self.base_url}/routing_form_submissions/{uuid}"
816
+ query_params = {}
817
+ response = self._get(url, params=query_params)
818
+ response.raise_for_status()
819
+ return response.json()
820
+
821
+ def list_routing_form_submissions(
822
+ self, form=None, count=None, page_token=None, sort=None
823
+ ) -> dict[str, Any]:
824
+ """
825
+ Retrieves a list of routing form submissions, optionally filtered and paginated based on provided parameters.
826
+
827
+ Args:
828
+ form: Optional; the identifier of the form to filter submissions by (default is None).
829
+ count: Optional; the maximum number of submissions to return (default is None).
830
+ page_token: Optional; token for pagination to retrieve the next set of results (default is None).
831
+ sort: Optional; sorting preference for the submissions (default is None).
832
+
833
+ Returns:
834
+ A dictionary containing the retrieved routing form submissions and related metadata.
835
+ """
836
+ url = f"{self.base_url}/routing_form_submissions"
837
+ query_params = {
838
+ k: v
839
+ for k, v in [
840
+ ("form", form),
841
+ ("count", count),
842
+ ("page_token", page_token),
843
+ ("sort", sort),
844
+ ]
845
+ if v is not None
846
+ }
847
+ response = self._get(url, params=query_params)
848
+ response.raise_for_status()
849
+ return response.json()
850
+
851
+ def list_event_type_available_times(
852
+ self, event_type=None, start_time=None, end_time=None
853
+ ) -> dict[str, Any]:
854
+ """
855
+ Retrieves available times for a specified event type within an optional date and time range.
856
+
857
+ Args:
858
+ event_type: Optional; the type of event to filter available times for. If None, retrieves times for all event types.
859
+ start_time: Optional; the earliest datetime to include in the results, in an accepted string or datetime format. If None, no lower bound is applied.
860
+ end_time: Optional; the latest datetime to include in the results, in an accepted string or datetime format. If None, no upper bound is applied.
861
+
862
+ Returns:
863
+ A dictionary containing the available times for the specified event type within the given range, as returned by the API.
864
+ """
865
+ url = f"{self.base_url}/event_type_available_times"
866
+ query_params = {
867
+ k: v
868
+ for k, v in [
869
+ ("event_type", event_type),
870
+ ("start_time", start_time),
871
+ ("end_time", end_time),
872
+ ]
873
+ if v is not None
874
+ }
875
+ response = self._get(url, params=query_params)
876
+ response.raise_for_status()
877
+ return response.json()
878
+
879
+ def list_activity_log_entries(
880
+ self,
881
+ organization=None,
882
+ search_term=None,
883
+ actor=None,
884
+ sort=None,
885
+ min_occurred_at=None,
886
+ max_occurred_at=None,
887
+ page_token=None,
888
+ count=None,
889
+ namespace=None,
890
+ action=None,
891
+ ) -> dict[str, Any]:
892
+ """
893
+ Retrieves a list of activity log entries with optional filtering, sorting, and pagination.
894
+
895
+ Args:
896
+ organization: Optional; organization identifier to filter log entries by a specific organization.
897
+ search_term: Optional; term to search for in the activity log entries.
898
+ actor: Optional; filter results by the user or entity that performed the action.
899
+ sort: Optional; sorting order for the results (e.g., ascending or descending by a field).
900
+ min_occurred_at: Optional; ISO 8601 timestamp to filter entries that occurred after this date and time.
901
+ max_occurred_at: Optional; ISO 8601 timestamp to filter entries that occurred before this date and time.
902
+ page_token: Optional; token for paginating through large result sets.
903
+ count: Optional; maximum number of entries to return.
904
+ namespace: Optional; filter results by a specific namespace.
905
+ action: Optional; filter results by a specific action performed.
906
+
907
+ Returns:
908
+ A dictionary containing a list of activity log entries and any associated pagination metadata.
909
+ """
910
+ url = f"{self.base_url}/activity_log_entries"
911
+ query_params = {
912
+ k: v
913
+ for k, v in [
914
+ ("organization", organization),
915
+ ("search_term", search_term),
916
+ ("actor", actor),
917
+ ("sort", sort),
918
+ ("min_occurred_at", min_occurred_at),
919
+ ("max_occurred_at", max_occurred_at),
920
+ ("page_token", page_token),
921
+ ("count", count),
922
+ ("namespace", namespace),
923
+ ("action", action),
924
+ ]
925
+ if v is not None
926
+ }
927
+ response = self._get(url, params=query_params)
928
+ response.raise_for_status()
929
+ return response.json()
930
+
931
+ def create_share(
932
+ self,
933
+ availability_rule=None,
934
+ duration=None,
935
+ end_date=None,
936
+ event_type=None,
937
+ hide_location=None,
938
+ location_configurations=None,
939
+ max_booking_time=None,
940
+ name=None,
941
+ period_type=None,
942
+ start_date=None,
943
+ ) -> dict[str, Any]:
944
+ """
945
+ Creates a new share with the specified configuration parameters by making a POST request to the shares API endpoint.
946
+
947
+ Args:
948
+ availability_rule: Optional; rule defining the availability for the share.
949
+ duration: Optional; duration of the event or booking in minutes.
950
+ end_date: Optional; end date for the share's availability.
951
+ event_type: Optional; type of event associated with the share.
952
+ hide_location: Optional; whether to hide the location details.
953
+ location_configurations: Optional; configuration details for one or more locations.
954
+ max_booking_time: Optional; maximum allowable booking time in minutes.
955
+ name: Optional; name of the share.
956
+ period_type: Optional; type of period (e.g., recurring, single).
957
+ start_date: Optional; start date for the share's availability.
958
+
959
+ Returns:
960
+ A dictionary containing the JSON response from the API with details of the created share.
961
+ """
962
+ request_body = {
963
+ "availability_rule": availability_rule,
964
+ "duration": duration,
965
+ "end_date": end_date,
966
+ "event_type": event_type,
967
+ "hide_location": hide_location,
968
+ "location_configurations": location_configurations,
969
+ "max_booking_time": max_booking_time,
970
+ "name": name,
971
+ "period_type": period_type,
972
+ "start_date": start_date,
973
+ }
974
+ request_body = {k: v for k, v in request_body.items() if v is not None}
975
+ url = f"{self.base_url}/shares"
976
+ query_params = {}
977
+ response = self._post(url, data=request_body, params=query_params)
978
+ response.raise_for_status()
979
+ return response.json()
980
+
981
+ def list_user_busy_times(
982
+ self, user=None, start_time=None, end_time=None
983
+ ) -> dict[str, Any]:
984
+ """
985
+ Retrieves a list of busy time intervals for a specified user within an optional date range.
986
+
987
+ Args:
988
+ user: Optional; The identifier of the user whose busy times are to be listed. If None, retrieves busy times for all users.
989
+ start_time: Optional; The start of the time range (ISO 8601 format). Only busy times starting at or after this time are included. If None, no lower bound is applied.
990
+ end_time: Optional; The end of the time range (ISO 8601 format). Only busy times ending before or at this time are included. If None, no upper bound is applied.
991
+
992
+ Returns:
993
+ A dictionary containing the user's busy time intervals and related metadata as returned by the API.
994
+ """
995
+ url = f"{self.base_url}/user_busy_times"
996
+ query_params = {
997
+ k: v
998
+ for k, v in [
999
+ ("user", user),
1000
+ ("start_time", start_time),
1001
+ ("end_time", end_time),
1002
+ ]
1003
+ if v is not None
1004
+ }
1005
+ response = self._get(url, params=query_params)
1006
+ response.raise_for_status()
1007
+ return response.json()
1008
+
1009
+ def get_user_availability_schedule(self, uuid) -> dict[str, Any]:
1010
+ """
1011
+ Retrieves the availability schedule for a user identified by the given UUID.
1012
+
1013
+ Args:
1014
+ uuid: str. The UUID of the user whose availability schedule is to be retrieved.
1015
+
1016
+ Returns:
1017
+ dict[str, Any]: A dictionary containing the user's availability schedule as returned by the API.
1018
+ """
1019
+ if uuid is None:
1020
+ raise ValueError("Missing required parameter 'uuid'")
1021
+ url = f"{self.base_url}/user_availability_schedules/{uuid}"
1022
+ query_params = {}
1023
+ response = self._get(url, params=query_params)
1024
+ response.raise_for_status()
1025
+ return response.json()
1026
+
1027
+ def list_user_availability_schedules(self, user=None) -> dict[str, Any]:
1028
+ """
1029
+ Retrieves a list of user availability schedules from the API, optionally filtering by a specific user.
1030
+
1031
+ Args:
1032
+ user: Optional; a string representing the user identifier to filter the availability schedules. If None, schedules for all users are retrieved.
1033
+
1034
+ Returns:
1035
+ A dictionary containing the availability schedules returned by the API.
1036
+ """
1037
+ url = f"{self.base_url}/user_availability_schedules"
1038
+ query_params = {k: v for k, v in [("user", user)] if v is not None}
1039
+ response = self._get(url, params=query_params)
1040
+ response.raise_for_status()
1041
+ return response.json()
1042
+
1043
+ def list_event_type_hosts(
1044
+ self, event_type=None, count=None, page_token=None
1045
+ ) -> dict[str, Any]:
1046
+ """
1047
+ Retrieves a list of event type hosts based on provided filter, count, and pagination parameters.
1048
+
1049
+ Args:
1050
+ event_type: Optional; a string specifying the event type to filter hosts by.
1051
+ count: Optional; an integer indicating the maximum number of hosts to return.
1052
+ page_token: Optional; a string token to retrieve the next page of results for pagination.
1053
+
1054
+ Returns:
1055
+ A dictionary containing the JSON response with event type hosts data, which may include host details and pagination information.
1056
+ """
1057
+ url = f"{self.base_url}/event_type_memberships"
1058
+ query_params = {
1059
+ k: v
1060
+ for k, v in [
1061
+ ("event_type", event_type),
1062
+ ("count", count),
1063
+ ("page_token", page_token),
1064
+ ]
1065
+ if v is not None
1066
+ }
1067
+ response = self._get(url, params=query_params)
1068
+ response.raise_for_status()
1069
+ return response.json()
1070
+
1071
+ def create_one_off_event_type(
1072
+ self,
1073
+ co_hosts=None,
1074
+ date_setting=None,
1075
+ duration=None,
1076
+ host=None,
1077
+ location=None,
1078
+ name=None,
1079
+ timezone=None,
1080
+ ) -> dict[str, Any]:
1081
+ """
1082
+ Creates a one-off event type with specified parameters and returns the created event type details.
1083
+
1084
+ Args:
1085
+ co_hosts: Optional; a list or identifier(s) representing additional hosts for the event.
1086
+ date_setting: Optional; the date configuration for the event (e.g., specific date, date range, or recurrence settings).
1087
+ duration: Optional; the length of the event, typically in minutes.
1088
+ host: Optional; the main host or organizer of the event.
1089
+ location: Optional; the location information for the event (e.g., physical address or online meeting link).
1090
+ name: Optional; the name or title of the event.
1091
+ timezone: Optional; the timezone in which the event will take place.
1092
+
1093
+ Returns:
1094
+ A dictionary containing the details of the created one-off event type as returned by the API.
1095
+ """
1096
+ request_body = {
1097
+ "co_hosts": co_hosts,
1098
+ "date_setting": date_setting,
1099
+ "duration": duration,
1100
+ "host": host,
1101
+ "location": location,
1102
+ "name": name,
1103
+ "timezone": timezone,
1104
+ }
1105
+ request_body = {k: v for k, v in request_body.items() if v is not None}
1106
+ url = f"{self.base_url}/one_off_event_types"
1107
+ query_params = {}
1108
+ response = self._post(url, data=request_body, params=query_params)
1109
+ response.raise_for_status()
1110
+ return response.json()
1111
+
1112
+ def get_sample_webhook_data(
1113
+ self, event=None, organization=None, user=None, scope=None
1114
+ ) -> dict[str, Any]:
1115
+ """
1116
+ Retrieves sample webhook data from the API using optional filtering parameters.
1117
+
1118
+ Args:
1119
+ event: Optional; a string specifying the event type to filter the webhook data.
1120
+ organization: Optional; a string representing the organization identifier to filter the data.
1121
+ user: Optional; a string identifying the user to filter the webhook data.
1122
+ scope: Optional; a string indicating the scope to filter the webhook data.
1123
+
1124
+ Returns:
1125
+ A dictionary containing the JSON response with sample webhook data from the API.
1126
+ """
1127
+ url = f"{self.base_url}/sample_webhook_data"
1128
+ query_params = {
1129
+ k: v
1130
+ for k, v in [
1131
+ ("event", event),
1132
+ ("organization", organization),
1133
+ ("user", user),
1134
+ ("scope", scope),
1135
+ ]
1136
+ if v is not None
1137
+ }
1138
+ response = self._get(url, params=query_params)
1139
+ response.raise_for_status()
1140
+ return response.json()
1141
+
1142
+ def list_tools(self):
1143
+ """
1144
+ Returns a list of method references for various event, user, group, organization, and webhook operations supported by this instance.
1145
+
1146
+ Args:
1147
+ None: This method does not accept any parameters.
1148
+
1149
+ Returns:
1150
+ List of callable method references available on this instance for performing event, user, group, organization, and webhook operations.
1151
+ """
1152
+ return [
1153
+ self.list_event_invitees,
1154
+ self.get_event,
1155
+ self.get_event_invitee,
1156
+ self.list_events,
1157
+ self.get_event_type,
1158
+ self.list_user_sevent_types,
1159
+ self.get_user,
1160
+ self.get_current_user,
1161
+ self.list_organization_invitations,
1162
+ self.invite_user_to_organization,
1163
+ self.get_organization_invitation,
1164
+ self.revoke_user_sorganization_invitation,
1165
+ self.get_organization_membership,
1166
+ self.remove_user_from_organization,
1167
+ self.list_organization_memberships,
1168
+ self.get_webhook_subscription,
1169
+ self.delete_webhook_subscription,
1170
+ self.list_webhook_subscriptions,
1171
+ self.create_webhook_subscription,
1172
+ self.create_single_use_scheduling_link,
1173
+ self.delete_invitee_data,
1174
+ self.delete_scheduled_event_data,
1175
+ self.get_invitee_no_show,
1176
+ self.delete_invitee_no_show,
1177
+ self.create_invitee_no_show,
1178
+ self.get_group,
1179
+ self.list_groups,
1180
+ self.get_group_relationship,
1181
+ self.list_group_relationships,
1182
+ self.get_routing_form,
1183
+ self.list_routing_forms,
1184
+ self.get_routing_form_submission,
1185
+ self.list_routing_form_submissions,
1186
+ self.list_event_type_available_times,
1187
+ self.list_activity_log_entries,
1188
+ self.create_share,
1189
+ self.list_user_busy_times,
1190
+ self.get_user_availability_schedule,
1191
+ self.list_user_availability_schedules,
1192
+ self.list_event_type_hosts,
1193
+ self.create_one_off_event_type,
1194
+ self.get_sample_webhook_data,
1195
+ ]