universal-mcp-applications 0.1.22__py3-none-any.whl → 0.1.39rc8__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.

Potentially problematic release.


This version of universal-mcp-applications might be problematic. Click here for more details.

Files changed (120) hide show
  1. universal_mcp/applications/ahrefs/app.py +92 -238
  2. universal_mcp/applications/airtable/app.py +23 -122
  3. universal_mcp/applications/apollo/app.py +122 -475
  4. universal_mcp/applications/asana/app.py +605 -1755
  5. universal_mcp/applications/aws_s3/app.py +36 -103
  6. universal_mcp/applications/bill/app.py +644 -2055
  7. universal_mcp/applications/box/app.py +1246 -4159
  8. universal_mcp/applications/braze/app.py +410 -1476
  9. universal_mcp/applications/browser_use/README.md +15 -1
  10. universal_mcp/applications/browser_use/__init__.py +1 -0
  11. universal_mcp/applications/browser_use/app.py +94 -37
  12. universal_mcp/applications/cal_com_v2/app.py +207 -625
  13. universal_mcp/applications/calendly/app.py +103 -242
  14. universal_mcp/applications/canva/app.py +75 -140
  15. universal_mcp/applications/clickup/app.py +331 -798
  16. universal_mcp/applications/coda/app.py +240 -520
  17. universal_mcp/applications/confluence/app.py +497 -1285
  18. universal_mcp/applications/contentful/app.py +36 -151
  19. universal_mcp/applications/crustdata/app.py +42 -121
  20. universal_mcp/applications/dialpad/app.py +451 -924
  21. universal_mcp/applications/digitalocean/app.py +2071 -6082
  22. universal_mcp/applications/domain_checker/app.py +3 -54
  23. universal_mcp/applications/e2b/app.py +14 -64
  24. universal_mcp/applications/elevenlabs/app.py +9 -47
  25. universal_mcp/applications/exa/README.md +8 -4
  26. universal_mcp/applications/exa/app.py +408 -186
  27. universal_mcp/applications/falai/app.py +24 -101
  28. universal_mcp/applications/figma/app.py +91 -175
  29. universal_mcp/applications/file_system/app.py +2 -13
  30. universal_mcp/applications/firecrawl/app.py +186 -163
  31. universal_mcp/applications/fireflies/app.py +59 -281
  32. universal_mcp/applications/fpl/app.py +92 -529
  33. universal_mcp/applications/fpl/utils/fixtures.py +15 -49
  34. universal_mcp/applications/fpl/utils/helper.py +25 -89
  35. universal_mcp/applications/fpl/utils/league_utils.py +20 -64
  36. universal_mcp/applications/ghost_content/app.py +66 -175
  37. universal_mcp/applications/github/app.py +28 -65
  38. universal_mcp/applications/gong/app.py +140 -300
  39. universal_mcp/applications/google_calendar/app.py +26 -78
  40. universal_mcp/applications/google_docs/app.py +324 -354
  41. universal_mcp/applications/google_drive/app.py +194 -793
  42. universal_mcp/applications/google_gemini/app.py +29 -64
  43. universal_mcp/applications/google_mail/README.md +1 -0
  44. universal_mcp/applications/google_mail/app.py +93 -214
  45. universal_mcp/applications/google_searchconsole/app.py +25 -58
  46. universal_mcp/applications/google_sheet/app.py +174 -623
  47. universal_mcp/applications/google_sheet/helper.py +26 -53
  48. universal_mcp/applications/hashnode/app.py +57 -269
  49. universal_mcp/applications/heygen/app.py +77 -155
  50. universal_mcp/applications/http_tools/app.py +10 -32
  51. universal_mcp/applications/hubspot/README.md +1 -1
  52. universal_mcp/applications/hubspot/app.py +7508 -99
  53. universal_mcp/applications/jira/app.py +2419 -8334
  54. universal_mcp/applications/klaviyo/app.py +737 -1619
  55. universal_mcp/applications/linkedin/README.md +23 -4
  56. universal_mcp/applications/linkedin/app.py +861 -155
  57. universal_mcp/applications/mailchimp/app.py +696 -1851
  58. universal_mcp/applications/markitdown/app.py +8 -20
  59. universal_mcp/applications/miro/app.py +333 -815
  60. universal_mcp/applications/ms_teams/app.py +85 -207
  61. universal_mcp/applications/neon/app.py +144 -250
  62. universal_mcp/applications/notion/app.py +36 -51
  63. universal_mcp/applications/onedrive/README.md +24 -0
  64. universal_mcp/applications/onedrive/__init__.py +1 -0
  65. universal_mcp/applications/onedrive/app.py +316 -0
  66. universal_mcp/applications/openai/app.py +42 -165
  67. universal_mcp/applications/outlook/README.md +22 -9
  68. universal_mcp/applications/outlook/app.py +606 -262
  69. universal_mcp/applications/perplexity/README.md +2 -1
  70. universal_mcp/applications/perplexity/app.py +162 -20
  71. universal_mcp/applications/pipedrive/app.py +1021 -3331
  72. universal_mcp/applications/posthog/app.py +272 -541
  73. universal_mcp/applications/reddit/app.py +88 -204
  74. universal_mcp/applications/resend/app.py +41 -107
  75. universal_mcp/applications/retell/app.py +23 -50
  76. universal_mcp/applications/rocketlane/app.py +250 -963
  77. universal_mcp/applications/scraper/README.md +7 -4
  78. universal_mcp/applications/scraper/app.py +245 -283
  79. universal_mcp/applications/semanticscholar/app.py +36 -78
  80. universal_mcp/applications/semrush/app.py +43 -77
  81. universal_mcp/applications/sendgrid/app.py +826 -1576
  82. universal_mcp/applications/sentry/app.py +444 -1079
  83. universal_mcp/applications/serpapi/app.py +40 -143
  84. universal_mcp/applications/sharepoint/README.md +16 -14
  85. universal_mcp/applications/sharepoint/app.py +245 -154
  86. universal_mcp/applications/shopify/app.py +1743 -4479
  87. universal_mcp/applications/shortcut/app.py +272 -534
  88. universal_mcp/applications/slack/app.py +58 -109
  89. universal_mcp/applications/spotify/app.py +206 -405
  90. universal_mcp/applications/supabase/app.py +174 -283
  91. universal_mcp/applications/tavily/app.py +2 -2
  92. universal_mcp/applications/trello/app.py +853 -2816
  93. universal_mcp/applications/twilio/app.py +14 -50
  94. universal_mcp/applications/twitter/api_segments/compliance_api.py +4 -14
  95. universal_mcp/applications/twitter/api_segments/dm_conversations_api.py +6 -18
  96. universal_mcp/applications/twitter/api_segments/likes_api.py +1 -3
  97. universal_mcp/applications/twitter/api_segments/lists_api.py +5 -15
  98. universal_mcp/applications/twitter/api_segments/trends_api.py +1 -3
  99. universal_mcp/applications/twitter/api_segments/tweets_api.py +9 -31
  100. universal_mcp/applications/twitter/api_segments/usage_api.py +1 -5
  101. universal_mcp/applications/twitter/api_segments/users_api.py +14 -42
  102. universal_mcp/applications/whatsapp/app.py +35 -186
  103. universal_mcp/applications/whatsapp/audio.py +2 -6
  104. universal_mcp/applications/whatsapp/whatsapp.py +17 -51
  105. universal_mcp/applications/whatsapp_business/app.py +86 -299
  106. universal_mcp/applications/wrike/app.py +80 -153
  107. universal_mcp/applications/yahoo_finance/app.py +19 -65
  108. universal_mcp/applications/youtube/app.py +120 -306
  109. universal_mcp/applications/zenquotes/app.py +4 -4
  110. {universal_mcp_applications-0.1.22.dist-info → universal_mcp_applications-0.1.39rc8.dist-info}/METADATA +4 -2
  111. {universal_mcp_applications-0.1.22.dist-info → universal_mcp_applications-0.1.39rc8.dist-info}/RECORD +113 -117
  112. {universal_mcp_applications-0.1.22.dist-info → universal_mcp_applications-0.1.39rc8.dist-info}/WHEEL +1 -1
  113. universal_mcp/applications/hubspot/api_segments/__init__.py +0 -0
  114. universal_mcp/applications/hubspot/api_segments/api_segment_base.py +0 -54
  115. universal_mcp/applications/hubspot/api_segments/crm_api.py +0 -7337
  116. universal_mcp/applications/hubspot/api_segments/marketing_api.py +0 -1467
  117. universal_mcp/applications/unipile/README.md +0 -28
  118. universal_mcp/applications/unipile/__init__.py +0 -1
  119. universal_mcp/applications/unipile/app.py +0 -1077
  120. {universal_mcp_applications-0.1.22.dist-info → universal_mcp_applications-0.1.39rc8.dist-info}/licenses/LICENSE +0 -0
@@ -1,5 +1,4 @@
1
1
  from typing import Any
2
-
3
2
  from universal_mcp.applications.application import APIApplication
4
3
  from universal_mcp.integrations import Integration
5
4
 
@@ -9,9 +8,7 @@ class CalendlyApp(APIApplication):
9
8
  super().__init__(name="calendly", integration=integration, **kwargs)
10
9
  self.base_url = "https://api.calendly.com"
11
10
 
12
- def list_event_invitees(
13
- self, uuid, status=None, sort=None, email=None, page_token=None, count=None
14
- ) -> dict[str, Any]:
11
+ async def list_event_invitees(self, uuid, status=None, sort=None, email=None, page_token=None, count=None) -> dict[str, Any]:
15
12
  """
16
13
  Retrieves a paginated list of invitees for a specific scheduled event, identified by its UUID. The results can be filtered by invitee status or email, sorted by creation date, and the list size can be controlled using pagination parameters.
17
14
 
@@ -34,20 +31,14 @@ class CalendlyApp(APIApplication):
34
31
  url = f"{self.base_url}/scheduled_events/{uuid}/invitees"
35
32
  query_params = {
36
33
  k: v
37
- for k, v in [
38
- ("status", status),
39
- ("sort", sort),
40
- ("email", email),
41
- ("page_token", page_token),
42
- ("count", count),
43
- ]
34
+ for k, v in [("status", status), ("sort", sort), ("email", email), ("page_token", page_token), ("count", count)]
44
35
  if v is not None
45
36
  }
46
- response = self._get(url, params=query_params)
37
+ response = await self._aget(url, params=query_params)
47
38
  response.raise_for_status()
48
39
  return response.json()
49
40
 
50
- def get_scheduled_event(self, uuid) -> dict[str, Any]:
41
+ async def get_scheduled_event(self, uuid) -> dict[str, Any]:
51
42
  """
52
43
  Retrieves the details for a specific scheduled event using its unique identifier (UUID). This targets a single event instance, differentiating it from `list_events` which fetches a collection of events and `get_event_type` which retrieves an event template.
53
44
 
@@ -64,11 +55,11 @@ class CalendlyApp(APIApplication):
64
55
  raise ValueError("Missing required parameter 'uuid'")
65
56
  url = f"{self.base_url}/scheduled_events/{uuid}"
66
57
  query_params = {}
67
- response = self._get(url, params=query_params)
58
+ response = await self._aget(url, params=query_params)
68
59
  response.raise_for_status()
69
60
  return response.json()
70
61
 
71
- def get_event_invitee(self, event_uuid, invitee_uuid) -> dict[str, Any]:
62
+ async def get_event_invitee(self, event_uuid, invitee_uuid) -> dict[str, Any]:
72
63
  """
73
64
  Fetches detailed information for a single invitee associated with a specific scheduled event. It uses both the event's UUID and the invitee's UUID to uniquely identify and retrieve the correct record, distinguishing it from `list_event_invitees` which returns a collection.
74
65
 
@@ -88,11 +79,11 @@ class CalendlyApp(APIApplication):
88
79
  raise ValueError("Missing required parameter 'invitee_uuid'")
89
80
  url = f"{self.base_url}/scheduled_events/{event_uuid}/invitees/{invitee_uuid}"
90
81
  query_params = {}
91
- response = self._get(url, params=query_params)
82
+ response = await self._aget(url, params=query_params)
92
83
  response.raise_for_status()
93
84
  return response.json()
94
85
 
95
- def list_scheduled_events(
86
+ async def list_scheduled_events(
96
87
  self,
97
88
  user=None,
98
89
  organization=None,
@@ -145,11 +136,11 @@ class CalendlyApp(APIApplication):
145
136
  ]
146
137
  if v is not None
147
138
  }
148
- response = self._get(url, params=query_params)
139
+ response = await self._aget(url, params=query_params)
149
140
  response.raise_for_status()
150
141
  return response.json()
151
142
 
152
- def get_event_type(self, uuid) -> dict[str, Any]:
143
+ async def get_event_type(self, uuid) -> dict[str, Any]:
153
144
  """
154
145
  Retrieves the full details of a specific event type, such as its name, duration, and scheduling rules, by providing its unique identifier (UUID). It fetches a single resource, unlike list_user_sevent_types which retrieves a collection.
155
146
 
@@ -166,11 +157,11 @@ class CalendlyApp(APIApplication):
166
157
  raise ValueError("Missing required parameter 'uuid'")
167
158
  url = f"{self.base_url}/event_types/{uuid}"
168
159
  query_params = {}
169
- response = self._get(url, params=query_params)
160
+ response = await self._aget(url, params=query_params)
170
161
  response.raise_for_status()
171
162
  return response.json()
172
163
 
173
- def list_event_types(
164
+ async def list_event_types(
174
165
  self,
175
166
  active=None,
176
167
  organization=None,
@@ -215,11 +206,11 @@ class CalendlyApp(APIApplication):
215
206
  ]
216
207
  if v is not None
217
208
  }
218
- response = self._get(url, params=query_params)
209
+ response = await self._aget(url, params=query_params)
219
210
  response.raise_for_status()
220
211
  return response.json()
221
212
 
222
- def get_user(self, uuid) -> dict[str, Any]:
213
+ async def get_user(self, uuid) -> dict[str, Any]:
223
214
  """
224
215
  Retrieves the details of a specific user identified by their unique identifier (UUID). This differs from `get_current_user`, which fetches the profile of the currently authenticated user.
225
216
 
@@ -236,11 +227,11 @@ class CalendlyApp(APIApplication):
236
227
  raise ValueError("Missing required parameter 'uuid'")
237
228
  url = f"{self.base_url}/users/{uuid}"
238
229
  query_params = {}
239
- response = self._get(url, params=query_params)
230
+ response = await self._aget(url, params=query_params)
240
231
  response.raise_for_status()
241
232
  return response.json()
242
233
 
243
- def get_current_user(self) -> dict[str, Any]:
234
+ async def get_current_user(self) -> dict[str, Any]:
244
235
  """
245
236
  Retrieves profile information for the currently authenticated user by querying the `/users/me` endpoint. This function requires no parameters, unlike `get_user` which fetches a specific user by their UUID.
246
237
 
@@ -252,13 +243,11 @@ class CalendlyApp(APIApplication):
252
243
  """
253
244
  url = f"{self.base_url}/users/me"
254
245
  query_params = {}
255
- response = self._get(url, params=query_params)
246
+ response = await self._aget(url, params=query_params)
256
247
  response.raise_for_status()
257
248
  return response.json()
258
249
 
259
- def list_organization_invitations(
260
- self, uuid, count=None, page_token=None, sort=None, email=None, status=None
261
- ) -> dict[str, Any]:
250
+ async def list_organization_invitations(self, uuid, count=None, page_token=None, sort=None, email=None, status=None) -> dict[str, Any]:
262
251
  """
263
252
  Retrieves a paginated list of invitations for a specific organization, identified by its UUID. It allows optional filtering by email and status (e.g., pending, accepted) and sorting. This function fetches a collection of invitations, unlike `get_organization_invitation` which retrieves a single one.
264
253
 
@@ -281,20 +270,14 @@ class CalendlyApp(APIApplication):
281
270
  url = f"{self.base_url}/organizations/{uuid}/invitations"
282
271
  query_params = {
283
272
  k: v
284
- for k, v in [
285
- ("count", count),
286
- ("page_token", page_token),
287
- ("sort", sort),
288
- ("email", email),
289
- ("status", status),
290
- ]
273
+ for k, v in [("count", count), ("page_token", page_token), ("sort", sort), ("email", email), ("status", status)]
291
274
  if v is not None
292
275
  }
293
- response = self._get(url, params=query_params)
276
+ response = await self._aget(url, params=query_params)
294
277
  response.raise_for_status()
295
278
  return response.json()
296
279
 
297
- def create_organization_invitation(self, uuid, email=None) -> dict[str, Any]:
280
+ async def create_organization_invitation(self, uuid, email=None) -> dict[str, Any]:
298
281
  """
299
282
  Invites a user via email to join a specific organization, identified by the organization's UUID. This function creates a new pending invitation, distinguishing it from functions that list, retrieve, or revoke existing invitations.
300
283
 
@@ -316,17 +299,15 @@ class CalendlyApp(APIApplication):
316
299
  """
317
300
  if uuid is None:
318
301
  raise ValueError("Missing required parameter 'uuid'")
319
- request_body = {
320
- "email": email,
321
- }
302
+ request_body = {"email": email}
322
303
  request_body = {k: v for k, v in request_body.items() if v is not None}
323
304
  url = f"{self.base_url}/organizations/{uuid}/invitations"
324
305
  query_params = {}
325
- response = self._post(url, data=request_body, params=query_params)
306
+ response = await self._apost(url, data=request_body, params=query_params)
326
307
  response.raise_for_status()
327
308
  return response.json()
328
309
 
329
- def get_organization_invitation(self, org_uuid, uuid) -> dict[str, Any]:
310
+ async def get_organization_invitation(self, org_uuid, uuid) -> dict[str, Any]:
330
311
  """
331
312
  Retrieves the details of a single, specific invitation within an organization. It requires both the organization's unique identifier (`org_uuid`) and the invitation's unique identifier (`uuid`) for the lookup.
332
313
 
@@ -346,11 +327,11 @@ class CalendlyApp(APIApplication):
346
327
  raise ValueError("Missing required parameter 'uuid'")
347
328
  url = f"{self.base_url}/organizations/{org_uuid}/invitations/{uuid}"
348
329
  query_params = {}
349
- response = self._get(url, params=query_params)
330
+ response = await self._aget(url, params=query_params)
350
331
  response.raise_for_status()
351
332
  return response.json()
352
333
 
353
- def revoke_user_organization_invitation(self, org_uuid, uuid) -> Any:
334
+ async def revoke_user_organization_invitation(self, org_uuid, uuid) -> Any:
354
335
  """
355
336
  Revokes a specific user's invitation to an organization, identified by the organization and invitation UUIDs. This action permanently deletes the pending invitation, preventing it from being accepted.
356
337
 
@@ -370,11 +351,11 @@ class CalendlyApp(APIApplication):
370
351
  raise ValueError("Missing required parameter 'uuid'")
371
352
  url = f"{self.base_url}/organizations/{org_uuid}/invitations/{uuid}"
372
353
  query_params = {}
373
- response = self._delete(url, params=query_params)
354
+ response = await self._adelete(url, params=query_params)
374
355
  response.raise_for_status()
375
356
  return response.json()
376
357
 
377
- def get_organization_membership(self, uuid) -> dict[str, Any]:
358
+ async def get_organization_membership(self, uuid) -> dict[str, Any]:
378
359
  """
379
360
  Fetches the details of a specific organization membership using its unique identifier (UUID). Unlike `list_organization_memberships`, this function retrieves a single membership record rather than a collection.
380
361
 
@@ -391,11 +372,11 @@ class CalendlyApp(APIApplication):
391
372
  raise ValueError("Missing required parameter 'uuid'")
392
373
  url = f"{self.base_url}/organization_memberships/{uuid}"
393
374
  query_params = {}
394
- response = self._get(url, params=query_params)
375
+ response = await self._aget(url, params=query_params)
395
376
  response.raise_for_status()
396
377
  return response.json()
397
378
 
398
- def delete_organization_membership(self, uuid) -> Any:
379
+ async def delete_organization_membership(self, uuid) -> Any:
399
380
  """
400
381
  Deletes an organization membership by its unique UUID, effectively removing the associated user from the organization. This function is the destructive counterpart to `get_organization_membership` and acts on active members, not pending invitations.
401
382
 
@@ -412,13 +393,11 @@ class CalendlyApp(APIApplication):
412
393
  raise ValueError("Missing required parameter 'uuid'")
413
394
  url = f"{self.base_url}/organization_memberships/{uuid}"
414
395
  query_params = {}
415
- response = self._delete(url, params=query_params)
396
+ response = await self._adelete(url, params=query_params)
416
397
  response.raise_for_status()
417
398
  return response.json()
418
399
 
419
- def list_organization_memberships(
420
- self, page_token=None, count=None, email=None, organization=None, user=None
421
- ) -> dict[str, Any]:
400
+ async def list_organization_memberships(self, page_token=None, count=None, email=None, organization=None, user=None) -> dict[str, Any]:
422
401
  """
423
402
  Retrieves a paginated list of organization memberships. The results can be filtered by user, organization, or email address to narrow down the search for specific members within one or more organizations.
424
403
 
@@ -438,20 +417,14 @@ class CalendlyApp(APIApplication):
438
417
  url = f"{self.base_url}/organization_memberships"
439
418
  query_params = {
440
419
  k: v
441
- for k, v in [
442
- ("page_token", page_token),
443
- ("count", count),
444
- ("email", email),
445
- ("organization", organization),
446
- ("user", user),
447
- ]
420
+ for k, v in [("page_token", page_token), ("count", count), ("email", email), ("organization", organization), ("user", user)]
448
421
  if v is not None
449
422
  }
450
- response = self._get(url, params=query_params)
423
+ response = await self._aget(url, params=query_params)
451
424
  response.raise_for_status()
452
425
  return response.json()
453
426
 
454
- def get_webhook_subscription(self, webhook_uuid) -> dict[str, Any]:
427
+ async def get_webhook_subscription(self, webhook_uuid) -> dict[str, Any]:
455
428
  """
456
429
  Fetches detailed information for a single webhook subscription using its unique identifier (UUID). Unlike `list_webhook_subscriptions`, which returns a collection, this function retrieves one specific subscription's configuration and status.
457
430
 
@@ -468,11 +441,11 @@ class CalendlyApp(APIApplication):
468
441
  raise ValueError("Missing required parameter 'webhook_uuid'")
469
442
  url = f"{self.base_url}/webhook_subscriptions/{webhook_uuid}"
470
443
  query_params = {}
471
- response = self._get(url, params=query_params)
444
+ response = await self._aget(url, params=query_params)
472
445
  response.raise_for_status()
473
446
  return response.json()
474
447
 
475
- def delete_webhook_subscription(self, webhook_uuid) -> Any:
448
+ async def delete_webhook_subscription(self, webhook_uuid) -> Any:
476
449
  """
477
450
  Deletes a specific webhook subscription using its unique `webhook_uuid`. This function sends a DELETE request to the Calendly API to permanently remove the subscription, stopping all future event notifications. It raises an error if the deletion fails.
478
451
 
@@ -489,18 +462,12 @@ class CalendlyApp(APIApplication):
489
462
  raise ValueError("Missing required parameter 'webhook_uuid'")
490
463
  url = f"{self.base_url}/webhook_subscriptions/{webhook_uuid}"
491
464
  query_params = {}
492
- response = self._delete(url, params=query_params)
465
+ response = await self._adelete(url, params=query_params)
493
466
  response.raise_for_status()
494
467
  return response.json()
495
468
 
496
- def list_webhook_subscriptions(
497
- self,
498
- organization=None,
499
- user=None,
500
- page_token=None,
501
- count=None,
502
- sort=None,
503
- scope=None,
469
+ async def list_webhook_subscriptions(
470
+ self, organization=None, user=None, page_token=None, count=None, sort=None, scope=None
504
471
  ) -> dict[str, Any]:
505
472
  """
506
473
  Retrieves a collection of webhook subscriptions for a given scope (organization or user). Supports filtering, sorting, and pagination to browse multiple subscriptions, unlike functions like `get_webhook_subscription` which fetches a single subscription by its unique ID.
@@ -534,19 +501,12 @@ class CalendlyApp(APIApplication):
534
501
  ]
535
502
  if v is not None
536
503
  }
537
- response = self._get(url, params=query_params)
504
+ response = await self._aget(url, params=query_params)
538
505
  response.raise_for_status()
539
506
  return response.json()
540
507
 
541
- def create_webhook_subscription(
542
- self,
543
- events=None,
544
- group=None,
545
- organization=None,
546
- scope=None,
547
- signing_key=None,
548
- url=None,
549
- user=None,
508
+ async def create_webhook_subscription(
509
+ self, events=None, group=None, organization=None, scope=None, signing_key=None, url=None, user=None
550
510
  ) -> dict[str, Any]:
551
511
  """
552
512
  Creates a Calendly webhook subscription for specified events. It requires a callback URL, the scope (e.g., organization, user), and the list of events to monitor, registering the webhook via a POST request to the API.
@@ -593,13 +553,11 @@ class CalendlyApp(APIApplication):
593
553
  request_body = {k: v for k, v in request_body.items() if v is not None}
594
554
  url = f"{self.base_url}/webhook_subscriptions"
595
555
  query_params = {}
596
- response = self._post(url, data=request_body, params=query_params)
556
+ response = await self._apost(url, data=request_body, params=query_params)
597
557
  response.raise_for_status()
598
558
  return response.json()
599
559
 
600
- def create_limited_use_scheduling_link(
601
- self, max_event_count=None, owner=None, owner_type=None
602
- ) -> dict[str, Any]:
560
+ async def create_limited_use_scheduling_link(self, max_event_count=None, owner=None, owner_type=None) -> dict[str, Any]:
603
561
  """
604
562
  Generates a unique, limited-use scheduling link for a specific owner, such as an event type. The link is valid for a specified maximum number of bookings, after which it expires.
605
563
 
@@ -622,19 +580,15 @@ class CalendlyApp(APIApplication):
622
580
  Tags:
623
581
  scheduling_links
624
582
  """
625
- request_body = {
626
- "max_event_count": max_event_count,
627
- "owner": owner,
628
- "owner_type": owner_type,
629
- }
583
+ request_body = {"max_event_count": max_event_count, "owner": owner, "owner_type": owner_type}
630
584
  request_body = {k: v for k, v in request_body.items() if v is not None}
631
585
  url = f"{self.base_url}/scheduling_links"
632
586
  query_params = {}
633
- response = self._post(url, data=request_body, params=query_params)
587
+ response = await self._apost(url, data=request_body, params=query_params)
634
588
  response.raise_for_status()
635
589
  return response.json()
636
590
 
637
- def request_invitee_data_deletion(self, emails=None) -> dict[str, Any]:
591
+ async def request_invitee_data_deletion(self, emails=None) -> dict[str, Any]:
638
592
  """
639
593
  Submits an asynchronous data deletion request for one or more invitees, identified by their email addresses, to comply with privacy regulations. This action permanently removes invitee information from the system.
640
594
 
@@ -656,19 +610,15 @@ class CalendlyApp(APIApplication):
656
610
  Tags:
657
611
  data_compliance, deletion, invitees12
658
612
  """
659
- request_body = {
660
- "emails": emails,
661
- }
613
+ request_body = {"emails": emails}
662
614
  request_body = {k: v for k, v in request_body.items() if v is not None}
663
615
  url = f"{self.base_url}/data_compliance/deletion/invitees"
664
616
  query_params = {}
665
- response = self._post(url, data=request_body, params=query_params)
617
+ response = await self._apost(url, data=request_body, params=query_params)
666
618
  response.raise_for_status()
667
619
  return response.json()
668
620
 
669
- def request_scheduled_event_data_deletion(
670
- self, end_time=None, start_time=None
671
- ) -> dict[str, Any]:
621
+ async def request_scheduled_event_data_deletion(self, end_time=None, start_time=None) -> dict[str, Any]:
672
622
  """
673
623
  For data compliance, submits an asynchronous request to delete scheduled event data within a specified `start_time` and `end_time`. This targets events by time range, unlike `delete_invitee_data` which targets specific individuals.
674
624
 
@@ -689,18 +639,15 @@ class CalendlyApp(APIApplication):
689
639
  Tags:
690
640
  data_compliance, deletion, events
691
641
  """
692
- request_body = {
693
- "end_time": end_time,
694
- "start_time": start_time,
695
- }
642
+ request_body = {"end_time": end_time, "start_time": start_time}
696
643
  request_body = {k: v for k, v in request_body.items() if v is not None}
697
644
  url = f"{self.base_url}/data_compliance/deletion/events"
698
645
  query_params = {}
699
- response = self._post(url, data=request_body, params=query_params)
646
+ response = await self._apost(url, data=request_body, params=query_params)
700
647
  response.raise_for_status()
701
648
  return response.json()
702
649
 
703
- def get_invitee_no_show(self, uuid) -> dict[str, Any]:
650
+ async def get_invitee_no_show(self, uuid) -> dict[str, Any]:
704
651
  """
705
652
  Retrieves the details for a specific 'no-show' record associated with an invitee, identified by its unique ID (UUID). This function fetches a single record, unlike create_invitee_no_show which creates one.
706
653
 
@@ -717,11 +664,11 @@ class CalendlyApp(APIApplication):
717
664
  raise ValueError("Missing required parameter 'uuid'")
718
665
  url = f"{self.base_url}/invitee_no_shows/{uuid}"
719
666
  query_params = {}
720
- response = self._get(url, params=query_params)
667
+ response = await self._aget(url, params=query_params)
721
668
  response.raise_for_status()
722
669
  return response.json()
723
670
 
724
- def revoke_invitee_no_show(self, uuid) -> Any:
671
+ async def revoke_invitee_no_show(self, uuid) -> Any:
725
672
  """
726
673
  Deletes an invitee's 'no-show' record using its unique UUID. This operation revokes the no-show status previously assigned to an invitee, effectively undoing the action of `create_invitee_no_show`.
727
674
 
@@ -738,11 +685,11 @@ class CalendlyApp(APIApplication):
738
685
  raise ValueError("Missing required parameter 'uuid'")
739
686
  url = f"{self.base_url}/invitee_no_shows/{uuid}"
740
687
  query_params = {}
741
- response = self._delete(url, params=query_params)
688
+ response = await self._adelete(url, params=query_params)
742
689
  response.raise_for_status()
743
690
  return response.json()
744
691
 
745
- def mark_invitee_as_no_show(self, invitee=None) -> dict[str, Any]:
692
+ async def mark_invitee_as_no_show(self, invitee=None) -> dict[str, Any]:
746
693
  """
747
694
  Marks a specific invitee as a 'no-show' by creating a no-show record. It requires the invitee's URI and sends a POST request to the `/invitee_no_shows` endpoint, returning the details of the newly created entry.
748
695
 
@@ -761,17 +708,15 @@ class CalendlyApp(APIApplication):
761
708
  Tags:
762
709
  invitee_no_shows
763
710
  """
764
- request_body = {
765
- "invitee": invitee,
766
- }
711
+ request_body = {"invitee": invitee}
767
712
  request_body = {k: v for k, v in request_body.items() if v is not None}
768
713
  url = f"{self.base_url}/invitee_no_shows"
769
714
  query_params = {}
770
- response = self._post(url, data=request_body, params=query_params)
715
+ response = await self._apost(url, data=request_body, params=query_params)
771
716
  response.raise_for_status()
772
717
  return response.json()
773
718
 
774
- def get_group_by_id(self, uuid) -> dict[str, Any]:
719
+ async def get_group_by_id(self, uuid) -> dict[str, Any]:
775
720
  """
776
721
  Retrieves the details of a specific group by its unique identifier (UUID). Unlike `list_groups`, which returns multiple group records, this function fetches information for a single group.
777
722
 
@@ -788,13 +733,11 @@ class CalendlyApp(APIApplication):
788
733
  raise ValueError("Missing required parameter 'uuid'")
789
734
  url = f"{self.base_url}/groups/{uuid}"
790
735
  query_params = {}
791
- response = self._get(url, params=query_params)
736
+ response = await self._aget(url, params=query_params)
792
737
  response.raise_for_status()
793
738
  return response.json()
794
739
 
795
- def list_groups(
796
- self, organization=None, page_token=None, count=None
797
- ) -> dict[str, Any]:
740
+ async def list_groups(self, organization=None, page_token=None, count=None) -> dict[str, Any]:
798
741
  """
799
742
  Retrieves a paginated list of groups associated with a specific organization. The result set can be controlled using pagination parameters for the page token and the number of items to return per page.
800
743
 
@@ -810,20 +753,12 @@ class CalendlyApp(APIApplication):
810
753
  groups
811
754
  """
812
755
  url = f"{self.base_url}/groups"
813
- query_params = {
814
- k: v
815
- for k, v in [
816
- ("organization", organization),
817
- ("page_token", page_token),
818
- ("count", count),
819
- ]
820
- if v is not None
821
- }
822
- response = self._get(url, params=query_params)
756
+ query_params = {k: v for k, v in [("organization", organization), ("page_token", page_token), ("count", count)] if v is not None}
757
+ response = await self._aget(url, params=query_params)
823
758
  response.raise_for_status()
824
759
  return response.json()
825
760
 
826
- def get_group_relationship(self, uuid) -> dict[str, Any]:
761
+ async def get_group_relationship(self, uuid) -> dict[str, Any]:
827
762
  """
828
763
  Retrieves the details of a specific group relationship, which connects an owner (like a user or invitation) to a group, by its unique identifier (UUID). This differs from `list_group_relationships` which fetches a list.
829
764
 
@@ -840,13 +775,11 @@ class CalendlyApp(APIApplication):
840
775
  raise ValueError("Missing required parameter 'uuid'")
841
776
  url = f"{self.base_url}/group_relationships/{uuid}"
842
777
  query_params = {}
843
- response = self._get(url, params=query_params)
778
+ response = await self._aget(url, params=query_params)
844
779
  response.raise_for_status()
845
780
  return response.json()
846
781
 
847
- def list_group_relationships(
848
- self, count=None, page_token=None, organization=None, owner=None, group=None
849
- ) -> dict[str, Any]:
782
+ async def list_group_relationships(self, count=None, page_token=None, organization=None, owner=None, group=None) -> dict[str, Any]:
850
783
  """
851
784
  Fetches a paginated list of group relationships. The results can be filtered by organization, owner, or a specific group to refine the search and control the returned data set.
852
785
 
@@ -867,20 +800,14 @@ class CalendlyApp(APIApplication):
867
800
  url = f"{self.base_url}/group_relationships"
868
801
  query_params = {
869
802
  k: v
870
- for k, v in [
871
- ("count", count),
872
- ("page_token", page_token),
873
- ("organization", organization),
874
- ("owner", owner),
875
- ("group", group),
876
- ]
803
+ for k, v in [("count", count), ("page_token", page_token), ("organization", organization), ("owner", owner), ("group", group)]
877
804
  if v is not None
878
805
  }
879
- response = self._get(url, params=query_params)
806
+ response = await self._aget(url, params=query_params)
880
807
  response.raise_for_status()
881
808
  return response.json()
882
809
 
883
- def get_routing_form(self, uuid) -> dict[str, Any]:
810
+ async def get_routing_form(self, uuid) -> dict[str, Any]:
884
811
  """
885
812
  Retrieves the details of a specific routing form using its unique identifier (UUID). This is distinct from `list_routing_forms`, which fetches a collection, and from functions that retrieve form submissions.
886
813
 
@@ -897,13 +824,11 @@ class CalendlyApp(APIApplication):
897
824
  raise ValueError("Missing required parameter 'uuid'")
898
825
  url = f"{self.base_url}/routing_forms/{uuid}"
899
826
  query_params = {}
900
- response = self._get(url, params=query_params)
827
+ response = await self._aget(url, params=query_params)
901
828
  response.raise_for_status()
902
829
  return response.json()
903
830
 
904
- def list_routing_forms(
905
- self, organization=None, count=None, page_token=None, sort=None
906
- ) -> dict[str, Any]:
831
+ async def list_routing_forms(self, organization=None, count=None, page_token=None, sort=None) -> dict[str, Any]:
907
832
  """
908
833
  Retrieves a list of routing forms for a specified organization. This function supports pagination using a page token, sorting by creation date, and limiting the number of results returned per request, distinguishing it from `get_routing_form` which fetches a single item.
909
834
 
@@ -921,20 +846,13 @@ class CalendlyApp(APIApplication):
921
846
  """
922
847
  url = f"{self.base_url}/routing_forms"
923
848
  query_params = {
924
- k: v
925
- for k, v in [
926
- ("organization", organization),
927
- ("count", count),
928
- ("page_token", page_token),
929
- ("sort", sort),
930
- ]
931
- if v is not None
849
+ k: v for k, v in [("organization", organization), ("count", count), ("page_token", page_token), ("sort", sort)] if v is not None
932
850
  }
933
- response = self._get(url, params=query_params)
851
+ response = await self._aget(url, params=query_params)
934
852
  response.raise_for_status()
935
853
  return response.json()
936
854
 
937
- def get_routing_form_submission(self, uuid) -> dict[str, Any]:
855
+ async def get_routing_form_submission(self, uuid) -> dict[str, Any]:
938
856
  """
939
857
  Fetches details for a single routing form submission using its unique identifier (UUID). It queries the `/routing_form_submissions/{uuid}` endpoint, distinct from `list_routing_form_submissions` which retrieves multiple submissions.
940
858
 
@@ -951,13 +869,11 @@ class CalendlyApp(APIApplication):
951
869
  raise ValueError("Missing required parameter 'uuid'")
952
870
  url = f"{self.base_url}/routing_form_submissions/{uuid}"
953
871
  query_params = {}
954
- response = self._get(url, params=query_params)
872
+ response = await self._aget(url, params=query_params)
955
873
  response.raise_for_status()
956
874
  return response.json()
957
875
 
958
- def get_routing_form_submissions(
959
- self, form=None, count=None, page_token=None, sort=None
960
- ) -> dict[str, Any]:
876
+ async def get_routing_form_submissions(self, form=None, count=None, page_token=None, sort=None) -> dict[str, Any]:
961
877
  """
962
878
  Retrieves a paginated list of submissions associated with a specific routing form. The results can be sorted by creation date and navigated using count and page_token parameters.
963
879
 
@@ -974,23 +890,12 @@ class CalendlyApp(APIApplication):
974
890
  routing_form_submissions
975
891
  """
976
892
  url = f"{self.base_url}/routing_form_submissions"
977
- query_params = {
978
- k: v
979
- for k, v in [
980
- ("form", form),
981
- ("count", count),
982
- ("page_token", page_token),
983
- ("sort", sort),
984
- ]
985
- if v is not None
986
- }
987
- response = self._get(url, params=query_params)
893
+ query_params = {k: v for k, v in [("form", form), ("count", count), ("page_token", page_token), ("sort", sort)] if v is not None}
894
+ response = await self._aget(url, params=query_params)
988
895
  response.raise_for_status()
989
896
  return response.json()
990
897
 
991
- def list_event_type_available_times(
992
- self, event_type=None, start_time=None, end_time=None
993
- ) -> dict[str, Any]:
898
+ async def list_event_type_available_times(self, event_type=None, start_time=None, end_time=None) -> dict[str, Any]:
994
899
  """
995
900
  Retrieves a list of concrete, bookable time slots for a specific event type within a defined start and end time. It provides specific availability, distinct from functions that list a user's general busy times or configured schedules.
996
901
 
@@ -1006,20 +911,12 @@ class CalendlyApp(APIApplication):
1006
911
  event_type_available_times
1007
912
  """
1008
913
  url = f"{self.base_url}/event_type_available_times"
1009
- query_params = {
1010
- k: v
1011
- for k, v in [
1012
- ("event_type", event_type),
1013
- ("start_time", start_time),
1014
- ("end_time", end_time),
1015
- ]
1016
- if v is not None
1017
- }
1018
- response = self._get(url, params=query_params)
914
+ query_params = {k: v for k, v in [("event_type", event_type), ("start_time", start_time), ("end_time", end_time)] if v is not None}
915
+ response = await self._aget(url, params=query_params)
1019
916
  response.raise_for_status()
1020
917
  return response.json()
1021
918
 
1022
- def list_activity_log_entries(
919
+ async def list_activity_log_entries(
1023
920
  self,
1024
921
  organization=None,
1025
922
  search_term=None,
@@ -1070,11 +967,11 @@ class CalendlyApp(APIApplication):
1070
967
  ]
1071
968
  if v is not None
1072
969
  }
1073
- response = self._get(url, params=query_params)
970
+ response = await self._aget(url, params=query_params)
1074
971
  response.raise_for_status()
1075
972
  return response.json()
1076
973
 
1077
- def create_shareable_link(
974
+ async def create_shareable_link(
1078
975
  self,
1079
976
  availability_rule=None,
1080
977
  duration=None,
@@ -1187,13 +1084,11 @@ class CalendlyApp(APIApplication):
1187
1084
  request_body = {k: v for k, v in request_body.items() if v is not None}
1188
1085
  url = f"{self.base_url}/shares"
1189
1086
  query_params = {}
1190
- response = self._post(url, data=request_body, params=query_params)
1087
+ response = await self._apost(url, data=request_body, params=query_params)
1191
1088
  response.raise_for_status()
1192
1089
  return response.json()
1193
1090
 
1194
- def list_user_busy_times(
1195
- self, user=None, start_time=None, end_time=None
1196
- ) -> dict[str, Any]:
1091
+ async def list_user_busy_times(self, user=None, start_time=None, end_time=None) -> dict[str, Any]:
1197
1092
  """
1198
1093
  Fetches a user's busy time intervals within a specified date range, including all scheduled events. This helps determine actual unavailability, differing from `list_user_availability_schedules` which retrieves a user's general working hours.
1199
1094
 
@@ -1209,20 +1104,12 @@ class CalendlyApp(APIApplication):
1209
1104
  user_busy_times
1210
1105
  """
1211
1106
  url = f"{self.base_url}/user_busy_times"
1212
- query_params = {
1213
- k: v
1214
- for k, v in [
1215
- ("user", user),
1216
- ("start_time", start_time),
1217
- ("end_time", end_time),
1218
- ]
1219
- if v is not None
1220
- }
1221
- response = self._get(url, params=query_params)
1107
+ query_params = {k: v for k, v in [("user", user), ("start_time", start_time), ("end_time", end_time)] if v is not None}
1108
+ response = await self._aget(url, params=query_params)
1222
1109
  response.raise_for_status()
1223
1110
  return response.json()
1224
1111
 
1225
- def get_user_availability_schedule(self, uuid) -> dict[str, Any]:
1112
+ async def get_user_availability_schedule(self, uuid) -> dict[str, Any]:
1226
1113
  """
1227
1114
  Retrieves a specific user availability schedule by its unique identifier (UUID). It fetches a single schedule resource, unlike `list_user_availability_schedules`, which returns all schedules associated with a user.
1228
1115
 
@@ -1239,11 +1126,11 @@ class CalendlyApp(APIApplication):
1239
1126
  raise ValueError("Missing required parameter 'uuid'")
1240
1127
  url = f"{self.base_url}/user_availability_schedules/{uuid}"
1241
1128
  query_params = {}
1242
- response = self._get(url, params=query_params)
1129
+ response = await self._aget(url, params=query_params)
1243
1130
  response.raise_for_status()
1244
1131
  return response.json()
1245
1132
 
1246
- def list_schedules_for_user(self, user=None) -> dict[str, Any]:
1133
+ async def list_schedules_for_user(self, user=None) -> dict[str, Any]:
1247
1134
  """
1248
1135
  Retrieves all availability schedules for a specified user via their URI. Unlike `get_user_availability_schedule`, which fetches a single schedule by its UUID, this function returns a collection of all schedules defining a user's availability intervals.
1249
1136
 
@@ -1258,13 +1145,11 @@ class CalendlyApp(APIApplication):
1258
1145
  """
1259
1146
  url = f"{self.base_url}/user_availability_schedules"
1260
1147
  query_params = {k: v for k, v in [("user", user)] if v is not None}
1261
- response = self._get(url, params=query_params)
1148
+ response = await self._aget(url, params=query_params)
1262
1149
  response.raise_for_status()
1263
1150
  return response.json()
1264
1151
 
1265
- def list_event_type_memberships(
1266
- self, event_type=None, count=None, page_token=None
1267
- ) -> dict[str, Any]:
1152
+ async def list_event_type_memberships(self, event_type=None, count=None, page_token=None) -> dict[str, Any]:
1268
1153
  """
1269
1154
  Retrieves a paginated list of all user memberships (hosts) for a specific event type. It requires the event type's URI and allows for navigating through results using `count` and `page_token` parameters, returning the membership objects.
1270
1155
 
@@ -1280,28 +1165,13 @@ class CalendlyApp(APIApplication):
1280
1165
  event_type_memberships
1281
1166
  """
1282
1167
  url = f"{self.base_url}/event_type_memberships"
1283
- query_params = {
1284
- k: v
1285
- for k, v in [
1286
- ("event_type", event_type),
1287
- ("count", count),
1288
- ("page_token", page_token),
1289
- ]
1290
- if v is not None
1291
- }
1292
- response = self._get(url, params=query_params)
1168
+ query_params = {k: v for k, v in [("event_type", event_type), ("count", count), ("page_token", page_token)] if v is not None}
1169
+ response = await self._aget(url, params=query_params)
1293
1170
  response.raise_for_status()
1294
1171
  return response.json()
1295
1172
 
1296
- def create_one_off_event_type(
1297
- self,
1298
- co_hosts=None,
1299
- date_setting=None,
1300
- duration=None,
1301
- host=None,
1302
- location=None,
1303
- name=None,
1304
- timezone=None,
1173
+ async def create_one_off_event_type(
1174
+ self, co_hosts=None, date_setting=None, duration=None, host=None, location=None, name=None, timezone=None
1305
1175
  ) -> dict[str, Any]:
1306
1176
  """
1307
1177
  Creates a unique, non-reusable event type for a single, ad-hoc meeting. It defines event details like host, co-hosts, duration, and location, distinguishing it from standard, reusable event types.
@@ -1352,13 +1222,11 @@ class CalendlyApp(APIApplication):
1352
1222
  request_body = {k: v for k, v in request_body.items() if v is not None}
1353
1223
  url = f"{self.base_url}/one_off_event_types"
1354
1224
  query_params = {}
1355
- response = self._post(url, data=request_body, params=query_params)
1225
+ response = await self._apost(url, data=request_body, params=query_params)
1356
1226
  response.raise_for_status()
1357
1227
  return response.json()
1358
1228
 
1359
- def get_sample_webhook_data(
1360
- self, event=None, organization=None, user=None, scope=None
1361
- ) -> dict[str, Any]:
1229
+ async def get_sample_webhook_data(self, event=None, organization=None, user=None, scope=None) -> dict[str, Any]:
1362
1230
  """
1363
1231
  Fetches a sample webhook data payload for a specified event, organization, and scope. This helps developers preview the JSON structure for a webhook notification, facilitating testing and integration without needing to trigger a live event.
1364
1232
 
@@ -1376,16 +1244,9 @@ class CalendlyApp(APIApplication):
1376
1244
  """
1377
1245
  url = f"{self.base_url}/sample_webhook_data"
1378
1246
  query_params = {
1379
- k: v
1380
- for k, v in [
1381
- ("event", event),
1382
- ("organization", organization),
1383
- ("user", user),
1384
- ("scope", scope),
1385
- ]
1386
- if v is not None
1247
+ k: v for k, v in [("event", event), ("organization", organization), ("user", user), ("scope", scope)] if v is not None
1387
1248
  }
1388
- response = self._get(url, params=query_params)
1249
+ response = await self._aget(url, params=query_params)
1389
1250
  response.raise_for_status()
1390
1251
  return response.json()
1391
1252