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
 
@@ -11,14 +10,9 @@ class ShortcutApp(APIApplication):
11
10
 
12
11
  def _get_headers(self) -> dict[str, Any]:
13
12
  api_key = self.integration.get_credentials().get("api_key")
14
- return {
15
- "Shortcut-Token": f"{api_key}",
16
- "Content-Type": "application/json",
17
- }
13
+ return {"Shortcut-Token": f"{api_key}", "Content-Type": "application/json"}
18
14
 
19
- def list_categories(
20
- self,
21
- ) -> list[Any]:
15
+ async def list_categories(self) -> list[Any]:
22
16
  """
23
17
  Retrieves a list of categories from the API.
24
18
 
@@ -36,13 +30,11 @@ class ShortcutApp(APIApplication):
36
30
  """
37
31
  url = f"{self.base_url}/api/v3/categories"
38
32
  query_params = {}
39
- response = self._get(url, params=query_params)
33
+ response = await self._aget(url, params=query_params)
40
34
  response.raise_for_status()
41
35
  return response.json()
42
36
 
43
- def create_category(
44
- self, name, color=None, external_id=None, type=None
45
- ) -> dict[str, Any]:
37
+ async def create_category(self, name, color=None, external_id=None, type=None) -> dict[str, Any]:
46
38
  """
47
39
  Creates a new category with the specified parameters.
48
40
 
@@ -64,20 +56,15 @@ class ShortcutApp(APIApplication):
64
56
  """
65
57
  if name is None:
66
58
  raise ValueError("Missing required parameter 'name'")
67
- request_body = {
68
- "name": name,
69
- "color": color,
70
- "external_id": external_id,
71
- "type": type,
72
- }
59
+ request_body = {"name": name, "color": color, "external_id": external_id, "type": type}
73
60
  request_body = {k: v for k, v in request_body.items() if v is not None}
74
61
  url = f"{self.base_url}/api/v3/categories"
75
62
  query_params = {}
76
- response = self._post(url, data=request_body, params=query_params)
63
+ response = await self._apost(url, data=request_body, params=query_params)
77
64
  response.raise_for_status()
78
65
  return response.json()
79
66
 
80
- def get_category(self, category_public_id) -> dict[str, Any]:
67
+ async def get_category(self, category_public_id) -> dict[str, Any]:
81
68
  """
82
69
  Fetches a category by its public ID.
83
70
 
@@ -97,13 +84,11 @@ class ShortcutApp(APIApplication):
97
84
  raise ValueError("Missing required parameter 'category-public-id'")
98
85
  url = f"{self.base_url}/api/v3/categories/{category_public_id}"
99
86
  query_params = {}
100
- response = self._get(url, params=query_params)
87
+ response = await self._aget(url, params=query_params)
101
88
  response.raise_for_status()
102
89
  return response.json()
103
90
 
104
- def update_category(
105
- self, category_public_id, name=None, color=None, archived=None
106
- ) -> dict[str, Any]:
91
+ async def update_category(self, category_public_id, name=None, color=None, archived=None) -> dict[str, Any]:
107
92
  """
108
93
  Updates a category with the specified attributes.
109
94
 
@@ -125,19 +110,15 @@ class ShortcutApp(APIApplication):
125
110
  """
126
111
  if category_public_id is None:
127
112
  raise ValueError("Missing required parameter 'category-public-id'")
128
- request_body = {
129
- "name": name,
130
- "color": color,
131
- "archived": archived,
132
- }
113
+ request_body = {"name": name, "color": color, "archived": archived}
133
114
  request_body = {k: v for k, v in request_body.items() if v is not None}
134
115
  url = f"{self.base_url}/api/v3/categories/{category_public_id}"
135
116
  query_params = {}
136
- response = self._put(url, data=request_body, params=query_params)
117
+ response = await self._aput(url, data=request_body, params=query_params)
137
118
  response.raise_for_status()
138
119
  return response.json()
139
120
 
140
- def delete_category(self, category_public_id) -> Any:
121
+ async def delete_category(self, category_public_id) -> Any:
141
122
  """
142
123
  Deletes a category by its public ID.
143
124
 
@@ -158,11 +139,11 @@ class ShortcutApp(APIApplication):
158
139
  raise ValueError("Missing required parameter 'category-public-id'")
159
140
  url = f"{self.base_url}/api/v3/categories/{category_public_id}"
160
141
  query_params = {}
161
- response = self._delete(url, params=query_params)
142
+ response = await self._adelete(url, params=query_params)
162
143
  response.raise_for_status()
163
144
  return response.json()
164
145
 
165
- def list_category_milestones(self, category_public_id) -> list[Any]:
146
+ async def list_category_milestones(self, category_public_id) -> list[Any]:
166
147
  """
167
148
  Lists all milestones associated with a specified category.
168
149
 
@@ -183,11 +164,11 @@ class ShortcutApp(APIApplication):
183
164
  raise ValueError("Missing required parameter 'category-public-id'")
184
165
  url = f"{self.base_url}/api/v3/categories/{category_public_id}/milestones"
185
166
  query_params = {}
186
- response = self._get(url, params=query_params)
167
+ response = await self._aget(url, params=query_params)
187
168
  response.raise_for_status()
188
169
  return response.json()
189
170
 
190
- def list_category_objectives(self, category_public_id) -> list[Any]:
171
+ async def list_category_objectives(self, category_public_id) -> list[Any]:
191
172
  """
192
173
  Fetches and lists objectives for a given category based on its public ID.
193
174
 
@@ -207,13 +188,11 @@ class ShortcutApp(APIApplication):
207
188
  raise ValueError("Missing required parameter 'category-public-id'")
208
189
  url = f"{self.base_url}/api/v3/categories/{category_public_id}/objectives"
209
190
  query_params = {}
210
- response = self._get(url, params=query_params)
191
+ response = await self._aget(url, params=query_params)
211
192
  response.raise_for_status()
212
193
  return response.json()
213
194
 
214
- def list_custom_fields(
215
- self,
216
- ) -> list[Any]:
195
+ async def list_custom_fields(self) -> list[Any]:
217
196
  """
218
197
  Retrieves a list of custom fields from the API.
219
198
 
@@ -231,11 +210,11 @@ class ShortcutApp(APIApplication):
231
210
  """
232
211
  url = f"{self.base_url}/api/v3/custom-fields"
233
212
  query_params = {}
234
- response = self._get(url, params=query_params)
213
+ response = await self._aget(url, params=query_params)
235
214
  response.raise_for_status()
236
215
  return response.json()
237
216
 
238
- def get_custom_field(self, custom_field_public_id) -> dict[str, Any]:
217
+ async def get_custom_field(self, custom_field_public_id) -> dict[str, Any]:
239
218
  """
240
219
  Retrieves a custom field by its public ID.
241
220
 
@@ -256,11 +235,11 @@ class ShortcutApp(APIApplication):
256
235
  raise ValueError("Missing required parameter 'custom-field-public-id'")
257
236
  url = f"{self.base_url}/api/v3/custom-fields/{custom_field_public_id}"
258
237
  query_params = {}
259
- response = self._get(url, params=query_params)
238
+ response = await self._aget(url, params=query_params)
260
239
  response.raise_for_status()
261
240
  return response.json()
262
241
 
263
- def update_custom_field(
242
+ async def update_custom_field(
264
243
  self,
265
244
  custom_field_public_id,
266
245
  enabled=None,
@@ -308,11 +287,11 @@ class ShortcutApp(APIApplication):
308
287
  request_body = {k: v for k, v in request_body.items() if v is not None}
309
288
  url = f"{self.base_url}/api/v3/custom-fields/{custom_field_public_id}"
310
289
  query_params = {}
311
- response = self._put(url, data=request_body, params=query_params)
290
+ response = await self._aput(url, data=request_body, params=query_params)
312
291
  response.raise_for_status()
313
292
  return response.json()
314
293
 
315
- def delete_custom_field(self, custom_field_public_id) -> Any:
294
+ async def delete_custom_field(self, custom_field_public_id) -> Any:
316
295
  """
317
296
  Deletes a custom field specified by its public identifier.
318
297
 
@@ -333,13 +312,11 @@ class ShortcutApp(APIApplication):
333
312
  raise ValueError("Missing required parameter 'custom-field-public-id'")
334
313
  url = f"{self.base_url}/api/v3/custom-fields/{custom_field_public_id}"
335
314
  query_params = {}
336
- response = self._delete(url, params=query_params)
315
+ response = await self._adelete(url, params=query_params)
337
316
  response.raise_for_status()
338
317
  return response.json()
339
318
 
340
- def list_entity_templates(
341
- self,
342
- ) -> list[Any]:
319
+ async def list_entity_templates(self) -> list[Any]:
343
320
  """
344
321
  Retrieves a list of entity templates from an API endpoint.
345
322
 
@@ -357,13 +334,11 @@ class ShortcutApp(APIApplication):
357
334
  """
358
335
  url = f"{self.base_url}/api/v3/entity-templates"
359
336
  query_params = {}
360
- response = self._get(url, params=query_params)
337
+ response = await self._aget(url, params=query_params)
361
338
  response.raise_for_status()
362
339
  return response.json()
363
340
 
364
- def create_entity_template(
365
- self, name, story_contents, author_id=None
366
- ) -> dict[str, Any]:
341
+ async def create_entity_template(self, name, story_contents, author_id=None) -> dict[str, Any]:
367
342
  """
368
343
  Creates an entity template with the provided name, story contents, and optional author ID.
369
344
 
@@ -386,21 +361,15 @@ class ShortcutApp(APIApplication):
386
361
  raise ValueError("Missing required parameter 'name'")
387
362
  if story_contents is None:
388
363
  raise ValueError("Missing required parameter 'story_contents'")
389
- request_body = {
390
- "name": name,
391
- "author_id": author_id,
392
- "story_contents": story_contents,
393
- }
364
+ request_body = {"name": name, "author_id": author_id, "story_contents": story_contents}
394
365
  request_body = {k: v for k, v in request_body.items() if v is not None}
395
366
  url = f"{self.base_url}/api/v3/entity-templates"
396
367
  query_params = {}
397
- response = self._post(url, data=request_body, params=query_params)
368
+ response = await self._apost(url, data=request_body, params=query_params)
398
369
  response.raise_for_status()
399
370
  return response.json()
400
371
 
401
- def disable_story_templates(
402
- self,
403
- ) -> Any:
372
+ async def disable_story_templates(self) -> Any:
404
373
  """
405
374
  Disables story entity templates by sending a PUT request to the API endpoint.
406
375
 
@@ -418,13 +387,11 @@ class ShortcutApp(APIApplication):
418
387
  """
419
388
  url = f"{self.base_url}/api/v3/entity-templates/disable"
420
389
  query_params = {}
421
- response = self._put(url, data={}, params=query_params)
390
+ response = await self._aput(url, data={}, params=query_params)
422
391
  response.raise_for_status()
423
392
  return response.json()
424
393
 
425
- def enable_story_templates(
426
- self,
427
- ) -> Any:
394
+ async def enable_story_templates(self) -> Any:
428
395
  """
429
396
  Enables story templates by making a PUT request to the entity-templates endpoint.
430
397
 
@@ -442,11 +409,11 @@ class ShortcutApp(APIApplication):
442
409
  """
443
410
  url = f"{self.base_url}/api/v3/entity-templates/enable"
444
411
  query_params = {}
445
- response = self._put(url, data={}, params=query_params)
412
+ response = await self._aput(url, data={}, params=query_params)
446
413
  response.raise_for_status()
447
414
  return response.json()
448
415
 
449
- def get_entity_template(self, entity_template_public_id) -> dict[str, Any]:
416
+ async def get_entity_template(self, entity_template_public_id) -> dict[str, Any]:
450
417
  """
451
418
  Retrieves a specific entity template by its public ID.
452
419
 
@@ -467,13 +434,11 @@ class ShortcutApp(APIApplication):
467
434
  raise ValueError("Missing required parameter 'entity-template-public-id'")
468
435
  url = f"{self.base_url}/api/v3/entity-templates/{entity_template_public_id}"
469
436
  query_params = {}
470
- response = self._get(url, params=query_params)
437
+ response = await self._aget(url, params=query_params)
471
438
  response.raise_for_status()
472
439
  return response.json()
473
440
 
474
- def update_entity_template(
475
- self, entity_template_public_id, name=None, story_contents=None
476
- ) -> dict[str, Any]:
441
+ async def update_entity_template(self, entity_template_public_id, name=None, story_contents=None) -> dict[str, Any]:
477
442
  """
478
443
  Updates an entity template using the provided public ID, optionally setting its name and story contents.
479
444
 
@@ -493,18 +458,15 @@ class ShortcutApp(APIApplication):
493
458
  """
494
459
  if entity_template_public_id is None:
495
460
  raise ValueError("Missing required parameter 'entity-template-public-id'")
496
- request_body = {
497
- "name": name,
498
- "story_contents": story_contents,
499
- }
461
+ request_body = {"name": name, "story_contents": story_contents}
500
462
  request_body = {k: v for k, v in request_body.items() if v is not None}
501
463
  url = f"{self.base_url}/api/v3/entity-templates/{entity_template_public_id}"
502
464
  query_params = {}
503
- response = self._put(url, data=request_body, params=query_params)
465
+ response = await self._aput(url, data=request_body, params=query_params)
504
466
  response.raise_for_status()
505
467
  return response.json()
506
468
 
507
- def delete_entity_template(self, entity_template_public_id) -> Any:
469
+ async def delete_entity_template(self, entity_template_public_id) -> Any:
508
470
  """
509
471
  Deletes an entity template by its public ID.
510
472
 
@@ -524,13 +486,11 @@ class ShortcutApp(APIApplication):
524
486
  raise ValueError("Missing required parameter 'entity-template-public-id'")
525
487
  url = f"{self.base_url}/api/v3/entity-templates/{entity_template_public_id}"
526
488
  query_params = {}
527
- response = self._delete(url, params=query_params)
489
+ response = await self._adelete(url, params=query_params)
528
490
  response.raise_for_status()
529
491
  return response.json()
530
492
 
531
- def get_epic_workflow(
532
- self,
533
- ) -> dict[str, Any]:
493
+ async def get_epic_workflow(self) -> dict[str, Any]:
534
494
  """
535
495
  Retrieves the epic workflow configuration from the API.
536
496
 
@@ -548,11 +508,11 @@ class ShortcutApp(APIApplication):
548
508
  """
549
509
  url = f"{self.base_url}/api/v3/epic-workflow"
550
510
  query_params = {}
551
- response = self._get(url, params=query_params)
511
+ response = await self._aget(url, params=query_params)
552
512
  response.raise_for_status()
553
513
  return response.json()
554
514
 
555
- def list_epics(self, includes_description=None) -> list[Any]:
515
+ async def list_epics(self, includes_description=None) -> list[Any]:
556
516
  """
557
517
  Fetches a list of epics from the API.
558
518
 
@@ -569,16 +529,12 @@ class ShortcutApp(APIApplication):
569
529
  list, epics, async-job, management, important
570
530
  """
571
531
  url = f"{self.base_url}/api/v3/epics"
572
- query_params = {
573
- k: v
574
- for k, v in [("includes_description", includes_description)]
575
- if v is not None
576
- }
577
- response = self._get(url, params=query_params)
532
+ query_params = {k: v for k, v in [("includes_description", includes_description)] if v is not None}
533
+ response = await self._aget(url, params=query_params)
578
534
  response.raise_for_status()
579
535
  return response.json()
580
536
 
581
- def create_epic(
537
+ async def create_epic(
582
538
  self,
583
539
  name,
584
540
  description=None,
@@ -660,11 +616,11 @@ class ShortcutApp(APIApplication):
660
616
  request_body = {k: v for k, v in request_body.items() if v is not None}
661
617
  url = f"{self.base_url}/api/v3/epics"
662
618
  query_params = {}
663
- response = self._post(url, data=request_body, params=query_params)
619
+ response = await self._apost(url, data=request_body, params=query_params)
664
620
  response.raise_for_status()
665
621
  return response.json()
666
622
 
667
- def get_epic(self, epic_public_id) -> dict[str, Any]:
623
+ async def get_epic(self, epic_public_id) -> dict[str, Any]:
668
624
  """
669
625
  Fetches an epic by its public ID
670
626
 
@@ -684,11 +640,11 @@ class ShortcutApp(APIApplication):
684
640
  raise ValueError("Missing required parameter 'epic-public-id'")
685
641
  url = f"{self.base_url}/api/v3/epics/{epic_public_id}"
686
642
  query_params = {}
687
- response = self._get(url, params=query_params)
643
+ response = await self._aget(url, params=query_params)
688
644
  response.raise_for_status()
689
645
  return response.json()
690
646
 
691
- def update_epic(
647
+ async def update_epic(
692
648
  self,
693
649
  epic_public_id,
694
650
  description=None,
@@ -775,11 +731,11 @@ class ShortcutApp(APIApplication):
775
731
  request_body = {k: v for k, v in request_body.items() if v is not None}
776
732
  url = f"{self.base_url}/api/v3/epics/{epic_public_id}"
777
733
  query_params = {}
778
- response = self._put(url, data=request_body, params=query_params)
734
+ response = await self._aput(url, data=request_body, params=query_params)
779
735
  response.raise_for_status()
780
736
  return response.json()
781
737
 
782
- def delete_epic(self, epic_public_id) -> Any:
738
+ async def delete_epic(self, epic_public_id) -> Any:
783
739
  """
784
740
  Deletes an epic by its public ID.
785
741
 
@@ -800,11 +756,11 @@ class ShortcutApp(APIApplication):
800
756
  raise ValueError("Missing required parameter 'epic-public-id'")
801
757
  url = f"{self.base_url}/api/v3/epics/{epic_public_id}"
802
758
  query_params = {}
803
- response = self._delete(url, params=query_params)
759
+ response = await self._adelete(url, params=query_params)
804
760
  response.raise_for_status()
805
761
  return response.json()
806
762
 
807
- def list_epic_comments(self, epic_public_id) -> list[Any]:
763
+ async def list_epic_comments(self, epic_public_id) -> list[Any]:
808
764
  """
809
765
  Retrieves a list of comments for a specified epic.
810
766
 
@@ -825,18 +781,12 @@ class ShortcutApp(APIApplication):
825
781
  raise ValueError("Missing required parameter 'epic-public-id'")
826
782
  url = f"{self.base_url}/api/v3/epics/{epic_public_id}/comments"
827
783
  query_params = {}
828
- response = self._get(url, params=query_params)
784
+ response = await self._aget(url, params=query_params)
829
785
  response.raise_for_status()
830
786
  return response.json()
831
787
 
832
- def create_epic_comment(
833
- self,
834
- epic_public_id,
835
- text,
836
- author_id=None,
837
- created_at=None,
838
- updated_at=None,
839
- external_id=None,
788
+ async def create_epic_comment(
789
+ self, epic_public_id, text, author_id=None, created_at=None, updated_at=None, external_id=None
840
790
  ) -> dict[str, Any]:
841
791
  """
842
792
  Creates a comment on an epic with the specified details.
@@ -872,11 +822,11 @@ class ShortcutApp(APIApplication):
872
822
  request_body = {k: v for k, v in request_body.items() if v is not None}
873
823
  url = f"{self.base_url}/api/v3/epics/{epic_public_id}/comments"
874
824
  query_params = {}
875
- response = self._post(url, data=request_body, params=query_params)
825
+ response = await self._apost(url, data=request_body, params=query_params)
876
826
  response.raise_for_status()
877
827
  return response.json()
878
828
 
879
- def get_epic_comment(self, epic_public_id, comment_public_id) -> dict[str, Any]:
829
+ async def get_epic_comment(self, epic_public_id, comment_public_id) -> dict[str, Any]:
880
830
  """
881
831
  Retrieves a specific comment from an epic by their respective public IDs.
882
832
 
@@ -900,13 +850,11 @@ class ShortcutApp(APIApplication):
900
850
  raise ValueError("Missing required parameter 'comment-public-id'")
901
851
  url = f"{self.base_url}/api/v3/epics/{epic_public_id}/comments/{comment_public_id}"
902
852
  query_params = {}
903
- response = self._get(url, params=query_params)
853
+ response = await self._aget(url, params=query_params)
904
854
  response.raise_for_status()
905
855
  return response.json()
906
856
 
907
- def update_epic_comment(
908
- self, epic_public_id, comment_public_id, text
909
- ) -> dict[str, Any]:
857
+ async def update_epic_comment(self, epic_public_id, comment_public_id, text) -> dict[str, Any]:
910
858
  """
911
859
  Updates the text of an existing comment on a specified epic.
912
860
 
@@ -931,25 +879,16 @@ class ShortcutApp(APIApplication):
931
879
  raise ValueError("Missing required parameter 'comment-public-id'")
932
880
  if text is None:
933
881
  raise ValueError("Missing required parameter 'text'")
934
- request_body = {
935
- "text": text,
936
- }
882
+ request_body = {"text": text}
937
883
  request_body = {k: v for k, v in request_body.items() if v is not None}
938
884
  url = f"{self.base_url}/api/v3/epics/{epic_public_id}/comments/{comment_public_id}"
939
885
  query_params = {}
940
- response = self._put(url, data=request_body, params=query_params)
886
+ response = await self._aput(url, data=request_body, params=query_params)
941
887
  response.raise_for_status()
942
888
  return response.json()
943
889
 
944
- def create_epic_comment_comment(
945
- self,
946
- epic_public_id,
947
- comment_public_id,
948
- text,
949
- author_id=None,
950
- created_at=None,
951
- updated_at=None,
952
- external_id=None,
890
+ async def create_epic_comment_comment(
891
+ self, epic_public_id, comment_public_id, text, author_id=None, created_at=None, updated_at=None, external_id=None
953
892
  ) -> dict[str, Any]:
954
893
  """
955
894
  Creates a reply to an existing comment on a specified epic, sending the reply to the backend API and returning the created comment data.
@@ -989,11 +928,11 @@ class ShortcutApp(APIApplication):
989
928
  request_body = {k: v for k, v in request_body.items() if v is not None}
990
929
  url = f"{self.base_url}/api/v3/epics/{epic_public_id}/comments/{comment_public_id}"
991
930
  query_params = {}
992
- response = self._post(url, data=request_body, params=query_params)
931
+ response = await self._apost(url, data=request_body, params=query_params)
993
932
  response.raise_for_status()
994
933
  return response.json()
995
934
 
996
- def delete_epic_comment(self, epic_public_id, comment_public_id) -> Any:
935
+ async def delete_epic_comment(self, epic_public_id, comment_public_id) -> Any:
997
936
  """
998
937
  Deletes a specific comment from an epic using its public identifiers.
999
938
 
@@ -1017,11 +956,11 @@ class ShortcutApp(APIApplication):
1017
956
  raise ValueError("Missing required parameter 'comment-public-id'")
1018
957
  url = f"{self.base_url}/api/v3/epics/{epic_public_id}/comments/{comment_public_id}"
1019
958
  query_params = {}
1020
- response = self._delete(url, params=query_params)
959
+ response = await self._adelete(url, params=query_params)
1021
960
  response.raise_for_status()
1022
961
  return response.json()
1023
962
 
1024
- def list_epic_stories(self, epic_public_id, includes_description=None) -> list[Any]:
963
+ async def list_epic_stories(self, epic_public_id, includes_description=None) -> list[Any]:
1025
964
  """
1026
965
  Retrieves a list of stories associated with a specific epic.
1027
966
 
@@ -1042,16 +981,12 @@ class ShortcutApp(APIApplication):
1042
981
  if epic_public_id is None:
1043
982
  raise ValueError("Missing required parameter 'epic-public-id'")
1044
983
  url = f"{self.base_url}/api/v3/epics/{epic_public_id}/stories"
1045
- query_params = {
1046
- k: v
1047
- for k, v in [("includes_description", includes_description)]
1048
- if v is not None
1049
- }
1050
- response = self._get(url, params=query_params)
984
+ query_params = {k: v for k, v in [("includes_description", includes_description)] if v is not None}
985
+ response = await self._aget(url, params=query_params)
1051
986
  response.raise_for_status()
1052
987
  return response.json()
1053
988
 
1054
- def unlink_productboard_from_epic(self, epic_public_id) -> Any:
989
+ async def unlink_productboard_from_epic(self, epic_public_id) -> Any:
1055
990
  """
1056
991
  Unlinks a ProductBoard integration from an epic in the system.
1057
992
 
@@ -1072,11 +1007,11 @@ class ShortcutApp(APIApplication):
1072
1007
  raise ValueError("Missing required parameter 'epic-public-id'")
1073
1008
  url = f"{self.base_url}/api/v3/epics/{epic_public_id}/unlink-productboard"
1074
1009
  query_params = {}
1075
- response = self._post(url, data={}, params=query_params)
1010
+ response = await self._apost(url, data={}, params=query_params)
1076
1011
  response.raise_for_status()
1077
1012
  return response.json()
1078
1013
 
1079
- def get_external_link_stories(self, external_link) -> list[Any]:
1014
+ async def get_external_link_stories(self, external_link) -> list[Any]:
1080
1015
  """
1081
1016
  Retrieves stories associated with an external link.
1082
1017
 
@@ -1096,16 +1031,12 @@ class ShortcutApp(APIApplication):
1096
1031
  if external_link is None:
1097
1032
  raise ValueError("Missing required parameter 'external_link'")
1098
1033
  url = f"{self.base_url}/api/v3/external-link/stories"
1099
- query_params = {
1100
- k: v for k, v in [("external_link", external_link)] if v is not None
1101
- }
1102
- response = self._get(url, params=query_params)
1034
+ query_params = {k: v for k, v in [("external_link", external_link)] if v is not None}
1035
+ response = await self._aget(url, params=query_params)
1103
1036
  response.raise_for_status()
1104
1037
  return response.json()
1105
1038
 
1106
- def list_files(
1107
- self,
1108
- ) -> list[Any]:
1039
+ async def list_files(self) -> list[Any]:
1109
1040
  """
1110
1041
  Retrieves a list of files from the remote API endpoint.
1111
1042
 
@@ -1123,11 +1054,11 @@ class ShortcutApp(APIApplication):
1123
1054
  """
1124
1055
  url = f"{self.base_url}/api/v3/files"
1125
1056
  query_params = {}
1126
- response = self._get(url, params=query_params)
1057
+ response = await self._aget(url, params=query_params)
1127
1058
  response.raise_for_status()
1128
1059
  return response.json()
1129
1060
 
1130
- def get_file(self, file_public_id) -> dict[str, Any]:
1061
+ async def get_file(self, file_public_id) -> dict[str, Any]:
1131
1062
  """
1132
1063
  Retrieves a file based on its public ID, returning a dictionary containing file information.
1133
1064
 
@@ -1147,19 +1078,12 @@ class ShortcutApp(APIApplication):
1147
1078
  raise ValueError("Missing required parameter 'file-public-id'")
1148
1079
  url = f"{self.base_url}/api/v3/files/{file_public_id}"
1149
1080
  query_params = {}
1150
- response = self._get(url, params=query_params)
1081
+ response = await self._aget(url, params=query_params)
1151
1082
  response.raise_for_status()
1152
1083
  return response.json()
1153
1084
 
1154
- def update_file(
1155
- self,
1156
- file_public_id,
1157
- description=None,
1158
- created_at=None,
1159
- updated_at=None,
1160
- name=None,
1161
- uploader_id=None,
1162
- external_id=None,
1085
+ async def update_file(
1086
+ self, file_public_id, description=None, created_at=None, updated_at=None, name=None, uploader_id=None, external_id=None
1163
1087
  ) -> dict[str, Any]:
1164
1088
  """
1165
1089
  Updates metadata for a file identified by its public ID.
@@ -1196,11 +1120,11 @@ class ShortcutApp(APIApplication):
1196
1120
  request_body = {k: v for k, v in request_body.items() if v is not None}
1197
1121
  url = f"{self.base_url}/api/v3/files/{file_public_id}"
1198
1122
  query_params = {}
1199
- response = self._put(url, data=request_body, params=query_params)
1123
+ response = await self._aput(url, data=request_body, params=query_params)
1200
1124
  response.raise_for_status()
1201
1125
  return response.json()
1202
1126
 
1203
- def delete_file(self, file_public_id) -> Any:
1127
+ async def delete_file(self, file_public_id) -> Any:
1204
1128
  """
1205
1129
  Deletes a file identified by a public ID from the server.
1206
1130
 
@@ -1221,13 +1145,11 @@ class ShortcutApp(APIApplication):
1221
1145
  raise ValueError("Missing required parameter 'file-public-id'")
1222
1146
  url = f"{self.base_url}/api/v3/files/{file_public_id}"
1223
1147
  query_params = {}
1224
- response = self._delete(url, params=query_params)
1148
+ response = await self._adelete(url, params=query_params)
1225
1149
  response.raise_for_status()
1226
1150
  return response.json()
1227
1151
 
1228
- def list_groups(
1229
- self,
1230
- ) -> list[Any]:
1152
+ async def list_groups(self) -> list[Any]:
1231
1153
  """
1232
1154
  Retrieves a list of all groups from the API.
1233
1155
 
@@ -1245,20 +1167,12 @@ class ShortcutApp(APIApplication):
1245
1167
  """
1246
1168
  url = f"{self.base_url}/api/v3/groups"
1247
1169
  query_params = {}
1248
- response = self._get(url, params=query_params)
1170
+ response = await self._aget(url, params=query_params)
1249
1171
  response.raise_for_status()
1250
1172
  return response.json()
1251
1173
 
1252
- def create_group(
1253
- self,
1254
- name,
1255
- mention_name,
1256
- description=None,
1257
- member_ids=None,
1258
- workflow_ids=None,
1259
- color=None,
1260
- color_key=None,
1261
- display_icon_id=None,
1174
+ async def create_group(
1175
+ self, name, mention_name, description=None, member_ids=None, workflow_ids=None, color=None, color_key=None, display_icon_id=None
1262
1176
  ) -> dict[str, Any]:
1263
1177
  """
1264
1178
  Creates a new group with the specified configuration and returns the group's details.
@@ -1300,11 +1214,11 @@ class ShortcutApp(APIApplication):
1300
1214
  request_body = {k: v for k, v in request_body.items() if v is not None}
1301
1215
  url = f"{self.base_url}/api/v3/groups"
1302
1216
  query_params = {}
1303
- response = self._post(url, data=request_body, params=query_params)
1217
+ response = await self._apost(url, data=request_body, params=query_params)
1304
1218
  response.raise_for_status()
1305
1219
  return response.json()
1306
1220
 
1307
- def get_group(self, group_public_id) -> dict[str, Any]:
1221
+ async def get_group(self, group_public_id) -> dict[str, Any]:
1308
1222
  """
1309
1223
  Retrieves information about a specific group using its public ID.
1310
1224
 
@@ -1325,11 +1239,11 @@ class ShortcutApp(APIApplication):
1325
1239
  raise ValueError("Missing required parameter 'group-public-id'")
1326
1240
  url = f"{self.base_url}/api/v3/groups/{group_public_id}"
1327
1241
  query_params = {}
1328
- response = self._get(url, params=query_params)
1242
+ response = await self._aget(url, params=query_params)
1329
1243
  response.raise_for_status()
1330
1244
  return response.json()
1331
1245
 
1332
- def update_group(
1246
+ async def update_group(
1333
1247
  self,
1334
1248
  group_public_id,
1335
1249
  description=None,
@@ -1383,11 +1297,11 @@ class ShortcutApp(APIApplication):
1383
1297
  request_body = {k: v for k, v in request_body.items() if v is not None}
1384
1298
  url = f"{self.base_url}/api/v3/groups/{group_public_id}"
1385
1299
  query_params = {}
1386
- response = self._put(url, data=request_body, params=query_params)
1300
+ response = await self._aput(url, data=request_body, params=query_params)
1387
1301
  response.raise_for_status()
1388
1302
  return response.json()
1389
1303
 
1390
- def list_group_stories(self, group_public_id, limit=None, offset=None) -> list[Any]:
1304
+ async def list_group_stories(self, group_public_id, limit=None, offset=None) -> list[Any]:
1391
1305
  """
1392
1306
  Retrieves a list of stories from a specific group.
1393
1307
 
@@ -1409,16 +1323,12 @@ class ShortcutApp(APIApplication):
1409
1323
  if group_public_id is None:
1410
1324
  raise ValueError("Missing required parameter 'group-public-id'")
1411
1325
  url = f"{self.base_url}/api/v3/groups/{group_public_id}/stories"
1412
- query_params = {
1413
- k: v for k, v in [("limit", limit), ("offset", offset)] if v is not None
1414
- }
1415
- response = self._get(url, params=query_params)
1326
+ query_params = {k: v for k, v in [("limit", limit), ("offset", offset)] if v is not None}
1327
+ response = await self._aget(url, params=query_params)
1416
1328
  response.raise_for_status()
1417
1329
  return response.json()
1418
1330
 
1419
- def list_iterations(
1420
- self,
1421
- ) -> list[Any]:
1331
+ async def list_iterations(self) -> list[Any]:
1422
1332
  """
1423
1333
  Lists all available iterations from the API.
1424
1334
 
@@ -1436,19 +1346,12 @@ class ShortcutApp(APIApplication):
1436
1346
  """
1437
1347
  url = f"{self.base_url}/api/v3/iterations"
1438
1348
  query_params = {}
1439
- response = self._get(url, params=query_params)
1349
+ response = await self._aget(url, params=query_params)
1440
1350
  response.raise_for_status()
1441
1351
  return response.json()
1442
1352
 
1443
- def create_iteration(
1444
- self,
1445
- name,
1446
- start_date,
1447
- end_date,
1448
- follower_ids=None,
1449
- group_ids=None,
1450
- labels=None,
1451
- description=None,
1353
+ async def create_iteration(
1354
+ self, name, start_date, end_date, follower_ids=None, group_ids=None, labels=None, description=None
1452
1355
  ) -> dict[str, Any]:
1453
1356
  """
1454
1357
  Creates a new iteration with the specified details and returns the server's response as a dictionary.
@@ -1490,13 +1393,11 @@ class ShortcutApp(APIApplication):
1490
1393
  request_body = {k: v for k, v in request_body.items() if v is not None}
1491
1394
  url = f"{self.base_url}/api/v3/iterations"
1492
1395
  query_params = {}
1493
- response = self._post(url, data=request_body, params=query_params)
1396
+ response = await self._apost(url, data=request_body, params=query_params)
1494
1397
  response.raise_for_status()
1495
1398
  return response.json()
1496
1399
 
1497
- def disable_iterations(
1498
- self,
1499
- ) -> Any:
1400
+ async def disable_iterations(self) -> Any:
1500
1401
  """
1501
1402
  Disables iterations by making a PUT request to the iterations API endpoint.
1502
1403
 
@@ -1514,13 +1415,11 @@ class ShortcutApp(APIApplication):
1514
1415
  """
1515
1416
  url = f"{self.base_url}/api/v3/iterations/disable"
1516
1417
  query_params = {}
1517
- response = self._put(url, data={}, params=query_params)
1418
+ response = await self._aput(url, data={}, params=query_params)
1518
1419
  response.raise_for_status()
1519
1420
  return response.json()
1520
1421
 
1521
- def enable_iterations(
1522
- self,
1523
- ) -> Any:
1422
+ async def enable_iterations(self) -> Any:
1524
1423
  """
1525
1424
  Enable iterations for the API service.
1526
1425
 
@@ -1538,11 +1437,11 @@ class ShortcutApp(APIApplication):
1538
1437
  """
1539
1438
  url = f"{self.base_url}/api/v3/iterations/enable"
1540
1439
  query_params = {}
1541
- response = self._put(url, data={}, params=query_params)
1440
+ response = await self._aput(url, data={}, params=query_params)
1542
1441
  response.raise_for_status()
1543
1442
  return response.json()
1544
1443
 
1545
- def get_iteration(self, iteration_public_id) -> dict[str, Any]:
1444
+ async def get_iteration(self, iteration_public_id) -> dict[str, Any]:
1546
1445
  """
1547
1446
  Retrieves iteration details using the specified public ID.
1548
1447
 
@@ -1563,11 +1462,11 @@ class ShortcutApp(APIApplication):
1563
1462
  raise ValueError("Missing required parameter 'iteration-public-id'")
1564
1463
  url = f"{self.base_url}/api/v3/iterations/{iteration_public_id}"
1565
1464
  query_params = {}
1566
- response = self._get(url, params=query_params)
1465
+ response = await self._aget(url, params=query_params)
1567
1466
  response.raise_for_status()
1568
1467
  return response.json()
1569
1468
 
1570
- def update_iteration(
1469
+ async def update_iteration(
1571
1470
  self,
1572
1471
  iteration_public_id,
1573
1472
  follower_ids=None,
@@ -1615,11 +1514,11 @@ class ShortcutApp(APIApplication):
1615
1514
  request_body = {k: v for k, v in request_body.items() if v is not None}
1616
1515
  url = f"{self.base_url}/api/v3/iterations/{iteration_public_id}"
1617
1516
  query_params = {}
1618
- response = self._put(url, data=request_body, params=query_params)
1517
+ response = await self._aput(url, data=request_body, params=query_params)
1619
1518
  response.raise_for_status()
1620
1519
  return response.json()
1621
1520
 
1622
- def delete_iteration(self, iteration_public_id) -> Any:
1521
+ async def delete_iteration(self, iteration_public_id) -> Any:
1623
1522
  """
1624
1523
  Deletes a specific iteration identified by its public ID.
1625
1524
 
@@ -1640,13 +1539,11 @@ class ShortcutApp(APIApplication):
1640
1539
  raise ValueError("Missing required parameter 'iteration-public-id'")
1641
1540
  url = f"{self.base_url}/api/v3/iterations/{iteration_public_id}"
1642
1541
  query_params = {}
1643
- response = self._delete(url, params=query_params)
1542
+ response = await self._adelete(url, params=query_params)
1644
1543
  response.raise_for_status()
1645
1544
  return response.json()
1646
1545
 
1647
- def list_iteration_stories(
1648
- self, iteration_public_id, includes_description=None
1649
- ) -> list[Any]:
1546
+ async def list_iteration_stories(self, iteration_public_id, includes_description=None) -> list[Any]:
1650
1547
  """
1651
1548
  Retrieves a list of stories for a specified iteration, optionally including their descriptions.
1652
1549
 
@@ -1667,16 +1564,12 @@ class ShortcutApp(APIApplication):
1667
1564
  if iteration_public_id is None:
1668
1565
  raise ValueError("Missing required parameter 'iteration-public-id'")
1669
1566
  url = f"{self.base_url}/api/v3/iterations/{iteration_public_id}/stories"
1670
- query_params = {
1671
- k: v
1672
- for k, v in [("includes_description", includes_description)]
1673
- if v is not None
1674
- }
1675
- response = self._get(url, params=query_params)
1567
+ query_params = {k: v for k, v in [("includes_description", includes_description)] if v is not None}
1568
+ response = await self._aget(url, params=query_params)
1676
1569
  response.raise_for_status()
1677
1570
  return response.json()
1678
1571
 
1679
- def get_key_result(self, key_result_public_id) -> dict[str, Any]:
1572
+ async def get_key_result(self, key_result_public_id) -> dict[str, Any]:
1680
1573
  """
1681
1574
  Retrieves detailed information for a specific key result using its public identifier.
1682
1575
 
@@ -1697,17 +1590,12 @@ class ShortcutApp(APIApplication):
1697
1590
  raise ValueError("Missing required parameter 'key-result-public-id'")
1698
1591
  url = f"{self.base_url}/api/v3/key-results/{key_result_public_id}"
1699
1592
  query_params = {}
1700
- response = self._get(url, params=query_params)
1593
+ response = await self._aget(url, params=query_params)
1701
1594
  response.raise_for_status()
1702
1595
  return response.json()
1703
1596
 
1704
- def update_key_result(
1705
- self,
1706
- key_result_public_id,
1707
- name=None,
1708
- initial_observed_value=None,
1709
- observed_value=None,
1710
- target_value=None,
1597
+ async def update_key_result(
1598
+ self, key_result_public_id, name=None, initial_observed_value=None, observed_value=None, target_value=None
1711
1599
  ) -> dict[str, Any]:
1712
1600
  """
1713
1601
  Updates a key result with the provided details.
@@ -1739,11 +1627,11 @@ class ShortcutApp(APIApplication):
1739
1627
  request_body = {k: v for k, v in request_body.items() if v is not None}
1740
1628
  url = f"{self.base_url}/api/v3/key-results/{key_result_public_id}"
1741
1629
  query_params = {}
1742
- response = self._put(url, data=request_body, params=query_params)
1630
+ response = await self._aput(url, data=request_body, params=query_params)
1743
1631
  response.raise_for_status()
1744
1632
  return response.json()
1745
1633
 
1746
- def list_labels(self, slim=None) -> list[Any]:
1634
+ async def list_labels(self, slim=None) -> list[Any]:
1747
1635
  """
1748
1636
  Fetches a list of labels from the API.
1749
1637
 
@@ -1761,13 +1649,11 @@ class ShortcutApp(APIApplication):
1761
1649
  """
1762
1650
  url = f"{self.base_url}/api/v3/labels"
1763
1651
  query_params = {k: v for k, v in [("slim", slim)] if v is not None}
1764
- response = self._get(url, params=query_params)
1652
+ response = await self._aget(url, params=query_params)
1765
1653
  response.raise_for_status()
1766
1654
  return response.json()
1767
1655
 
1768
- def create_label(
1769
- self, name, description=None, color=None, external_id=None
1770
- ) -> dict[str, Any]:
1656
+ async def create_label(self, name, description=None, color=None, external_id=None) -> dict[str, Any]:
1771
1657
  """
1772
1658
  Creates a new label with the specified attributes.
1773
1659
 
@@ -1789,20 +1675,15 @@ class ShortcutApp(APIApplication):
1789
1675
  """
1790
1676
  if name is None:
1791
1677
  raise ValueError("Missing required parameter 'name'")
1792
- request_body = {
1793
- "name": name,
1794
- "description": description,
1795
- "color": color,
1796
- "external_id": external_id,
1797
- }
1678
+ request_body = {"name": name, "description": description, "color": color, "external_id": external_id}
1798
1679
  request_body = {k: v for k, v in request_body.items() if v is not None}
1799
1680
  url = f"{self.base_url}/api/v3/labels"
1800
1681
  query_params = {}
1801
- response = self._post(url, data=request_body, params=query_params)
1682
+ response = await self._apost(url, data=request_body, params=query_params)
1802
1683
  response.raise_for_status()
1803
1684
  return response.json()
1804
1685
 
1805
- def get_label(self, label_public_id) -> dict[str, Any]:
1686
+ async def get_label(self, label_public_id) -> dict[str, Any]:
1806
1687
  """
1807
1688
  Retrieves a label's details from the API using its public identifier.
1808
1689
 
@@ -1823,13 +1704,11 @@ class ShortcutApp(APIApplication):
1823
1704
  raise ValueError("Missing required parameter 'label-public-id'")
1824
1705
  url = f"{self.base_url}/api/v3/labels/{label_public_id}"
1825
1706
  query_params = {}
1826
- response = self._get(url, params=query_params)
1707
+ response = await self._aget(url, params=query_params)
1827
1708
  response.raise_for_status()
1828
1709
  return response.json()
1829
1710
 
1830
- def update_label(
1831
- self, label_public_id, name=None, description=None, color=None, archived=None
1832
- ) -> dict[str, Any]:
1711
+ async def update_label(self, label_public_id, name=None, description=None, color=None, archived=None) -> dict[str, Any]:
1833
1712
  """
1834
1713
  Updates a label with the specified information.
1835
1714
 
@@ -1852,20 +1731,15 @@ class ShortcutApp(APIApplication):
1852
1731
  """
1853
1732
  if label_public_id is None:
1854
1733
  raise ValueError("Missing required parameter 'label-public-id'")
1855
- request_body = {
1856
- "name": name,
1857
- "description": description,
1858
- "color": color,
1859
- "archived": archived,
1860
- }
1734
+ request_body = {"name": name, "description": description, "color": color, "archived": archived}
1861
1735
  request_body = {k: v for k, v in request_body.items() if v is not None}
1862
1736
  url = f"{self.base_url}/api/v3/labels/{label_public_id}"
1863
1737
  query_params = {}
1864
- response = self._put(url, data=request_body, params=query_params)
1738
+ response = await self._aput(url, data=request_body, params=query_params)
1865
1739
  response.raise_for_status()
1866
1740
  return response.json()
1867
1741
 
1868
- def delete_label(self, label_public_id) -> Any:
1742
+ async def delete_label(self, label_public_id) -> Any:
1869
1743
  """
1870
1744
  Deletes a label identified by its public ID via an HTTP DELETE request.
1871
1745
 
@@ -1886,11 +1760,11 @@ class ShortcutApp(APIApplication):
1886
1760
  raise ValueError("Missing required parameter 'label-public-id'")
1887
1761
  url = f"{self.base_url}/api/v3/labels/{label_public_id}"
1888
1762
  query_params = {}
1889
- response = self._delete(url, params=query_params)
1763
+ response = await self._adelete(url, params=query_params)
1890
1764
  response.raise_for_status()
1891
1765
  return response.json()
1892
1766
 
1893
- def list_label_epics(self, label_public_id) -> list[Any]:
1767
+ async def list_label_epics(self, label_public_id) -> list[Any]:
1894
1768
  """
1895
1769
  Retrieves a list of epics associated with a specific label.
1896
1770
 
@@ -1911,13 +1785,11 @@ class ShortcutApp(APIApplication):
1911
1785
  raise ValueError("Missing required parameter 'label-public-id'")
1912
1786
  url = f"{self.base_url}/api/v3/labels/{label_public_id}/epics"
1913
1787
  query_params = {}
1914
- response = self._get(url, params=query_params)
1788
+ response = await self._aget(url, params=query_params)
1915
1789
  response.raise_for_status()
1916
1790
  return response.json()
1917
1791
 
1918
- def list_label_stories(
1919
- self, label_public_id, includes_description=None
1920
- ) -> list[Any]:
1792
+ async def list_label_stories(self, label_public_id, includes_description=None) -> list[Any]:
1921
1793
  """
1922
1794
  Retrieves a list of stories associated with a specific label.
1923
1795
 
@@ -1938,18 +1810,12 @@ class ShortcutApp(APIApplication):
1938
1810
  if label_public_id is None:
1939
1811
  raise ValueError("Missing required parameter 'label-public-id'")
1940
1812
  url = f"{self.base_url}/api/v3/labels/{label_public_id}/stories"
1941
- query_params = {
1942
- k: v
1943
- for k, v in [("includes_description", includes_description)]
1944
- if v is not None
1945
- }
1946
- response = self._get(url, params=query_params)
1813
+ query_params = {k: v for k, v in [("includes_description", includes_description)] if v is not None}
1814
+ response = await self._aget(url, params=query_params)
1947
1815
  response.raise_for_status()
1948
1816
  return response.json()
1949
1817
 
1950
- def list_linked_files(
1951
- self,
1952
- ) -> list[Any]:
1818
+ async def list_linked_files(self) -> list[Any]:
1953
1819
  """
1954
1820
  Retrieve a list of all linked files.
1955
1821
 
@@ -1967,21 +1833,12 @@ class ShortcutApp(APIApplication):
1967
1833
  """
1968
1834
  url = f"{self.base_url}/api/v3/linked-files"
1969
1835
  query_params = {}
1970
- response = self._get(url, params=query_params)
1836
+ response = await self._aget(url, params=query_params)
1971
1837
  response.raise_for_status()
1972
1838
  return response.json()
1973
1839
 
1974
- def create_linked_file(
1975
- self,
1976
- name,
1977
- type,
1978
- url,
1979
- description=None,
1980
- story_id=None,
1981
- thumbnail_url=None,
1982
- size=None,
1983
- uploader_id=None,
1984
- content_type=None,
1840
+ async def create_linked_file(
1841
+ self, name, type, url, description=None, story_id=None, thumbnail_url=None, size=None, uploader_id=None, content_type=None
1985
1842
  ) -> dict[str, Any]:
1986
1843
  """
1987
1844
  Creates a linked file with the specified attributes.
@@ -2027,11 +1884,11 @@ class ShortcutApp(APIApplication):
2027
1884
  request_body = {k: v for k, v in request_body.items() if v is not None}
2028
1885
  url = f"{self.base_url}/api/v3/linked-files"
2029
1886
  query_params = {}
2030
- response = self._post(url, data=request_body, params=query_params)
1887
+ response = await self._apost(url, data=request_body, params=query_params)
2031
1888
  response.raise_for_status()
2032
1889
  return response.json()
2033
1890
 
2034
- def get_linked_file(self, linked_file_public_id) -> dict[str, Any]:
1891
+ async def get_linked_file(self, linked_file_public_id) -> dict[str, Any]:
2035
1892
  """
2036
1893
  Fetches details for a linked file by its public identifier.
2037
1894
 
@@ -2052,11 +1909,11 @@ class ShortcutApp(APIApplication):
2052
1909
  raise ValueError("Missing required parameter 'linked-file-public-id'")
2053
1910
  url = f"{self.base_url}/api/v3/linked-files/{linked_file_public_id}"
2054
1911
  query_params = {}
2055
- response = self._get(url, params=query_params)
1912
+ response = await self._aget(url, params=query_params)
2056
1913
  response.raise_for_status()
2057
1914
  return response.json()
2058
1915
 
2059
- def update_linked_file(
1916
+ async def update_linked_file(
2060
1917
  self,
2061
1918
  linked_file_public_id,
2062
1919
  description=None,
@@ -2107,11 +1964,11 @@ class ShortcutApp(APIApplication):
2107
1964
  request_body = {k: v for k, v in request_body.items() if v is not None}
2108
1965
  url = f"{self.base_url}/api/v3/linked-files/{linked_file_public_id}"
2109
1966
  query_params = {}
2110
- response = self._put(url, data=request_body, params=query_params)
1967
+ response = await self._aput(url, data=request_body, params=query_params)
2111
1968
  response.raise_for_status()
2112
1969
  return response.json()
2113
1970
 
2114
- def delete_linked_file(self, linked_file_public_id) -> Any:
1971
+ async def delete_linked_file(self, linked_file_public_id) -> Any:
2115
1972
  """
2116
1973
  Deletes a linked file by its public ID using the API.
2117
1974
 
@@ -2132,13 +1989,11 @@ class ShortcutApp(APIApplication):
2132
1989
  raise ValueError("Missing required parameter 'linked-file-public-id'")
2133
1990
  url = f"{self.base_url}/api/v3/linked-files/{linked_file_public_id}"
2134
1991
  query_params = {}
2135
- response = self._delete(url, params=query_params)
1992
+ response = await self._adelete(url, params=query_params)
2136
1993
  response.raise_for_status()
2137
1994
  return response.json()
2138
1995
 
2139
- def get_current_member_info(
2140
- self,
2141
- ) -> dict[str, Any]:
1996
+ async def get_current_member_info(self) -> dict[str, Any]:
2142
1997
  """
2143
1998
  Retrieves information about the current authenticated member.
2144
1999
 
@@ -2156,13 +2011,11 @@ class ShortcutApp(APIApplication):
2156
2011
  """
2157
2012
  url = f"{self.base_url}/api/v3/member"
2158
2013
  query_params = {}
2159
- response = self._get(url, params=query_params)
2014
+ response = await self._aget(url, params=query_params)
2160
2015
  response.raise_for_status()
2161
2016
  return response.json()
2162
2017
 
2163
- def list_milestones(
2164
- self,
2165
- ) -> list[Any]:
2018
+ async def list_milestones(self) -> list[Any]:
2166
2019
  """
2167
2020
  Lists milestones by fetching them from a specified API endpoint.
2168
2021
 
@@ -2180,18 +2033,12 @@ class ShortcutApp(APIApplication):
2180
2033
  """
2181
2034
  url = f"{self.base_url}/api/v3/milestones"
2182
2035
  query_params = {}
2183
- response = self._get(url, params=query_params)
2036
+ response = await self._aget(url, params=query_params)
2184
2037
  response.raise_for_status()
2185
2038
  return response.json()
2186
2039
 
2187
- def create_milestone(
2188
- self,
2189
- name,
2190
- description=None,
2191
- state=None,
2192
- started_at_override=None,
2193
- completed_at_override=None,
2194
- categories=None,
2040
+ async def create_milestone(
2041
+ self, name, description=None, state=None, started_at_override=None, completed_at_override=None, categories=None
2195
2042
  ) -> dict[str, Any]:
2196
2043
  """
2197
2044
  Creates a new milestone with the specified parameters.
@@ -2227,11 +2074,11 @@ class ShortcutApp(APIApplication):
2227
2074
  request_body = {k: v for k, v in request_body.items() if v is not None}
2228
2075
  url = f"{self.base_url}/api/v3/milestones"
2229
2076
  query_params = {}
2230
- response = self._post(url, data=request_body, params=query_params)
2077
+ response = await self._apost(url, data=request_body, params=query_params)
2231
2078
  response.raise_for_status()
2232
2079
  return response.json()
2233
2080
 
2234
- def get_milestone(self, milestone_public_id) -> dict[str, Any]:
2081
+ async def get_milestone(self, milestone_public_id) -> dict[str, Any]:
2235
2082
  """
2236
2083
  Retrieves a milestone resource by its public identifier.
2237
2084
 
@@ -2252,11 +2099,11 @@ class ShortcutApp(APIApplication):
2252
2099
  raise ValueError("Missing required parameter 'milestone-public-id'")
2253
2100
  url = f"{self.base_url}/api/v3/milestones/{milestone_public_id}"
2254
2101
  query_params = {}
2255
- response = self._get(url, params=query_params)
2102
+ response = await self._aget(url, params=query_params)
2256
2103
  response.raise_for_status()
2257
2104
  return response.json()
2258
2105
 
2259
- def update_milestone(
2106
+ async def update_milestone(
2260
2107
  self,
2261
2108
  milestone_public_id,
2262
2109
  description=None,
@@ -2310,11 +2157,11 @@ class ShortcutApp(APIApplication):
2310
2157
  request_body = {k: v for k, v in request_body.items() if v is not None}
2311
2158
  url = f"{self.base_url}/api/v3/milestones/{milestone_public_id}"
2312
2159
  query_params = {}
2313
- response = self._put(url, data=request_body, params=query_params)
2160
+ response = await self._aput(url, data=request_body, params=query_params)
2314
2161
  response.raise_for_status()
2315
2162
  return response.json()
2316
2163
 
2317
- def delete_milestone(self, milestone_public_id) -> Any:
2164
+ async def delete_milestone(self, milestone_public_id) -> Any:
2318
2165
  """
2319
2166
  Deletes a milestone by its public ID.
2320
2167
 
@@ -2335,11 +2182,11 @@ class ShortcutApp(APIApplication):
2335
2182
  raise ValueError("Missing required parameter 'milestone-public-id'")
2336
2183
  url = f"{self.base_url}/api/v3/milestones/{milestone_public_id}"
2337
2184
  query_params = {}
2338
- response = self._delete(url, params=query_params)
2185
+ response = await self._adelete(url, params=query_params)
2339
2186
  response.raise_for_status()
2340
2187
  return response.json()
2341
2188
 
2342
- def list_milestone_epics(self, milestone_public_id) -> list[Any]:
2189
+ async def list_milestone_epics(self, milestone_public_id) -> list[Any]:
2343
2190
  """
2344
2191
  Retrieves a list of epics associated with a specified milestone.
2345
2192
 
@@ -2360,13 +2207,11 @@ class ShortcutApp(APIApplication):
2360
2207
  raise ValueError("Missing required parameter 'milestone-public-id'")
2361
2208
  url = f"{self.base_url}/api/v3/milestones/{milestone_public_id}/epics"
2362
2209
  query_params = {}
2363
- response = self._get(url, params=query_params)
2210
+ response = await self._aget(url, params=query_params)
2364
2211
  response.raise_for_status()
2365
2212
  return response.json()
2366
2213
 
2367
- def list_objectives(
2368
- self,
2369
- ) -> list[Any]:
2214
+ async def list_objectives(self) -> list[Any]:
2370
2215
  """
2371
2216
  Retrieves a list of all objectives from the API endpoint.
2372
2217
 
@@ -2384,18 +2229,12 @@ class ShortcutApp(APIApplication):
2384
2229
  """
2385
2230
  url = f"{self.base_url}/api/v3/objectives"
2386
2231
  query_params = {}
2387
- response = self._get(url, params=query_params)
2232
+ response = await self._aget(url, params=query_params)
2388
2233
  response.raise_for_status()
2389
2234
  return response.json()
2390
2235
 
2391
- def create_objective(
2392
- self,
2393
- name,
2394
- description=None,
2395
- state=None,
2396
- started_at_override=None,
2397
- completed_at_override=None,
2398
- categories=None,
2236
+ async def create_objective(
2237
+ self, name, description=None, state=None, started_at_override=None, completed_at_override=None, categories=None
2399
2238
  ) -> dict[str, Any]:
2400
2239
  """
2401
2240
  Creates a new objective resource with the specified attributes and returns the created objective's data.
@@ -2431,11 +2270,11 @@ class ShortcutApp(APIApplication):
2431
2270
  request_body = {k: v for k, v in request_body.items() if v is not None}
2432
2271
  url = f"{self.base_url}/api/v3/objectives"
2433
2272
  query_params = {}
2434
- response = self._post(url, data=request_body, params=query_params)
2273
+ response = await self._apost(url, data=request_body, params=query_params)
2435
2274
  response.raise_for_status()
2436
2275
  return response.json()
2437
2276
 
2438
- def get_objective(self, objective_public_id) -> dict[str, Any]:
2277
+ async def get_objective(self, objective_public_id) -> dict[str, Any]:
2439
2278
  """
2440
2279
  Retrieves an objective by its public ID from the API.
2441
2280
 
@@ -2456,11 +2295,11 @@ class ShortcutApp(APIApplication):
2456
2295
  raise ValueError("Missing required parameter 'objective-public-id'")
2457
2296
  url = f"{self.base_url}/api/v3/objectives/{objective_public_id}"
2458
2297
  query_params = {}
2459
- response = self._get(url, params=query_params)
2298
+ response = await self._aget(url, params=query_params)
2460
2299
  response.raise_for_status()
2461
2300
  return response.json()
2462
2301
 
2463
- def update_objective(
2302
+ async def update_objective(
2464
2303
  self,
2465
2304
  objective_public_id,
2466
2305
  description=None,
@@ -2514,11 +2353,11 @@ class ShortcutApp(APIApplication):
2514
2353
  request_body = {k: v for k, v in request_body.items() if v is not None}
2515
2354
  url = f"{self.base_url}/api/v3/objectives/{objective_public_id}"
2516
2355
  query_params = {}
2517
- response = self._put(url, data=request_body, params=query_params)
2356
+ response = await self._aput(url, data=request_body, params=query_params)
2518
2357
  response.raise_for_status()
2519
2358
  return response.json()
2520
2359
 
2521
- def delete_objective(self, objective_public_id) -> Any:
2360
+ async def delete_objective(self, objective_public_id) -> Any:
2522
2361
  """
2523
2362
  Deletes an objective by its public ID using an HTTP DELETE request.
2524
2363
 
@@ -2539,11 +2378,11 @@ class ShortcutApp(APIApplication):
2539
2378
  raise ValueError("Missing required parameter 'objective-public-id'")
2540
2379
  url = f"{self.base_url}/api/v3/objectives/{objective_public_id}"
2541
2380
  query_params = {}
2542
- response = self._delete(url, params=query_params)
2381
+ response = await self._adelete(url, params=query_params)
2543
2382
  response.raise_for_status()
2544
2383
  return response.json()
2545
2384
 
2546
- def list_objective_epics(self, objective_public_id) -> list[Any]:
2385
+ async def list_objective_epics(self, objective_public_id) -> list[Any]:
2547
2386
  """
2548
2387
  Retrieves a list of epics associated with a specific objective.
2549
2388
 
@@ -2564,13 +2403,11 @@ class ShortcutApp(APIApplication):
2564
2403
  raise ValueError("Missing required parameter 'objective-public-id'")
2565
2404
  url = f"{self.base_url}/api/v3/objectives/{objective_public_id}/epics"
2566
2405
  query_params = {}
2567
- response = self._get(url, params=query_params)
2406
+ response = await self._aget(url, params=query_params)
2568
2407
  response.raise_for_status()
2569
2408
  return response.json()
2570
2409
 
2571
- def list_projects(
2572
- self,
2573
- ) -> list[Any]:
2410
+ async def list_projects(self) -> list[Any]:
2574
2411
  """
2575
2412
  Retrieves and lists all available projects from the API.
2576
2413
 
@@ -2588,11 +2425,11 @@ class ShortcutApp(APIApplication):
2588
2425
  """
2589
2426
  url = f"{self.base_url}/api/v3/projects"
2590
2427
  query_params = {}
2591
- response = self._get(url, params=query_params)
2428
+ response = await self._aget(url, params=query_params)
2592
2429
  response.raise_for_status()
2593
2430
  return response.json()
2594
2431
 
2595
- def create_project(
2432
+ async def create_project(
2596
2433
  self,
2597
2434
  name,
2598
2435
  team_id,
@@ -2651,11 +2488,11 @@ class ShortcutApp(APIApplication):
2651
2488
  request_body = {k: v for k, v in request_body.items() if v is not None}
2652
2489
  url = f"{self.base_url}/api/v3/projects"
2653
2490
  query_params = {}
2654
- response = self._post(url, data=request_body, params=query_params)
2491
+ response = await self._apost(url, data=request_body, params=query_params)
2655
2492
  response.raise_for_status()
2656
2493
  return response.json()
2657
2494
 
2658
- def get_project(self, project_public_id) -> dict[str, Any]:
2495
+ async def get_project(self, project_public_id) -> dict[str, Any]:
2659
2496
  """
2660
2497
  Retrieves project information by its public ID.
2661
2498
 
@@ -2676,11 +2513,11 @@ class ShortcutApp(APIApplication):
2676
2513
  raise ValueError("Missing required parameter 'project-public-id'")
2677
2514
  url = f"{self.base_url}/api/v3/projects/{project_public_id}"
2678
2515
  query_params = {}
2679
- response = self._get(url, params=query_params)
2516
+ response = await self._aget(url, params=query_params)
2680
2517
  response.raise_for_status()
2681
2518
  return response.json()
2682
2519
 
2683
- def update_project(
2520
+ async def update_project(
2684
2521
  self,
2685
2522
  project_public_id,
2686
2523
  description=None,
@@ -2734,11 +2571,11 @@ class ShortcutApp(APIApplication):
2734
2571
  request_body = {k: v for k, v in request_body.items() if v is not None}
2735
2572
  url = f"{self.base_url}/api/v3/projects/{project_public_id}"
2736
2573
  query_params = {}
2737
- response = self._put(url, data=request_body, params=query_params)
2574
+ response = await self._aput(url, data=request_body, params=query_params)
2738
2575
  response.raise_for_status()
2739
2576
  return response.json()
2740
2577
 
2741
- def delete_project(self, project_public_id) -> Any:
2578
+ async def delete_project(self, project_public_id) -> Any:
2742
2579
  """
2743
2580
  Deletes a project using its public ID.
2744
2581
 
@@ -2759,11 +2596,11 @@ class ShortcutApp(APIApplication):
2759
2596
  raise ValueError("Missing required parameter 'project-public-id'")
2760
2597
  url = f"{self.base_url}/api/v3/projects/{project_public_id}"
2761
2598
  query_params = {}
2762
- response = self._delete(url, params=query_params)
2599
+ response = await self._adelete(url, params=query_params)
2763
2600
  response.raise_for_status()
2764
2601
  return response.json()
2765
2602
 
2766
- def list_stories(self, project_public_id, includes_description=None) -> list[Any]:
2603
+ async def list_stories(self, project_public_id, includes_description=None) -> list[Any]:
2767
2604
  """
2768
2605
  Retrieves a list of stories for a specific project, with optional inclusion of story descriptions.
2769
2606
 
@@ -2784,18 +2621,12 @@ class ShortcutApp(APIApplication):
2784
2621
  if project_public_id is None:
2785
2622
  raise ValueError("Missing required parameter 'project-public-id'")
2786
2623
  url = f"{self.base_url}/api/v3/projects/{project_public_id}/stories"
2787
- query_params = {
2788
- k: v
2789
- for k, v in [("includes_description", includes_description)]
2790
- if v is not None
2791
- }
2792
- response = self._get(url, params=query_params)
2624
+ query_params = {k: v for k, v in [("includes_description", includes_description)] if v is not None}
2625
+ response = await self._aget(url, params=query_params)
2793
2626
  response.raise_for_status()
2794
2627
  return response.json()
2795
2628
 
2796
- def list_repositories(
2797
- self,
2798
- ) -> list[Any]:
2629
+ async def list_repositories(self) -> list[Any]:
2799
2630
  """
2800
2631
  Lists all repositories from the API.
2801
2632
 
@@ -2813,11 +2644,11 @@ class ShortcutApp(APIApplication):
2813
2644
  """
2814
2645
  url = f"{self.base_url}/api/v3/repositories"
2815
2646
  query_params = {}
2816
- response = self._get(url, params=query_params)
2647
+ response = await self._aget(url, params=query_params)
2817
2648
  response.raise_for_status()
2818
2649
  return response.json()
2819
2650
 
2820
- def get_repository(self, repo_public_id) -> dict[str, Any]:
2651
+ async def get_repository(self, repo_public_id) -> dict[str, Any]:
2821
2652
  """
2822
2653
  Retrieves detailed information about a repository by its public ID.
2823
2654
 
@@ -2838,13 +2669,11 @@ class ShortcutApp(APIApplication):
2838
2669
  raise ValueError("Missing required parameter 'repo-public-id'")
2839
2670
  url = f"{self.base_url}/api/v3/repositories/{repo_public_id}"
2840
2671
  query_params = {}
2841
- response = self._get(url, params=query_params)
2672
+ response = await self._aget(url, params=query_params)
2842
2673
  response.raise_for_status()
2843
2674
  return response.json()
2844
2675
 
2845
- def search(
2846
- self, query, page_size=None, detail=None, next=None, entity_types=None
2847
- ) -> dict[str, Any]:
2676
+ async def search(self, query, page_size=None, detail=None, next=None, entity_types=None) -> dict[str, Any]:
2848
2677
  """
2849
2678
  Performs a search operation based on the provided query string and optional parameters like page size and entity types.
2850
2679
 
@@ -2869,22 +2698,14 @@ class ShortcutApp(APIApplication):
2869
2698
  url = f"{self.base_url}/api/v3/search"
2870
2699
  query_params = {
2871
2700
  k: v
2872
- for k, v in [
2873
- ("query", query),
2874
- ("page_size", page_size),
2875
- ("detail", detail),
2876
- ("next", next),
2877
- ("entity_types", entity_types),
2878
- ]
2701
+ for k, v in [("query", query), ("page_size", page_size), ("detail", detail), ("next", next), ("entity_types", entity_types)]
2879
2702
  if v is not None
2880
2703
  }
2881
- response = self._get(url, params=query_params)
2704
+ response = await self._aget(url, params=query_params)
2882
2705
  response.raise_for_status()
2883
2706
  return response.json()
2884
2707
 
2885
- def search_epics(
2886
- self, query, page_size=None, detail=None, next=None, entity_types=None
2887
- ) -> dict[str, Any]:
2708
+ async def search_epics(self, query, page_size=None, detail=None, next=None, entity_types=None) -> dict[str, Any]:
2888
2709
  """
2889
2710
  Searches for epics based on the provided query parameters.
2890
2711
 
@@ -2910,22 +2731,14 @@ class ShortcutApp(APIApplication):
2910
2731
  url = f"{self.base_url}/api/v3/search/epics"
2911
2732
  query_params = {
2912
2733
  k: v
2913
- for k, v in [
2914
- ("query", query),
2915
- ("page_size", page_size),
2916
- ("detail", detail),
2917
- ("next", next),
2918
- ("entity_types", entity_types),
2919
- ]
2734
+ for k, v in [("query", query), ("page_size", page_size), ("detail", detail), ("next", next), ("entity_types", entity_types)]
2920
2735
  if v is not None
2921
2736
  }
2922
- response = self._get(url, params=query_params)
2737
+ response = await self._aget(url, params=query_params)
2923
2738
  response.raise_for_status()
2924
2739
  return response.json()
2925
2740
 
2926
- def search_iterations(
2927
- self, query, page_size=None, detail=None, next=None, entity_types=None
2928
- ) -> dict[str, Any]:
2741
+ async def search_iterations(self, query, page_size=None, detail=None, next=None, entity_types=None) -> dict[str, Any]:
2929
2742
  """
2930
2743
  Searches for iterations based on a query and additional parameters.
2931
2744
 
@@ -2951,22 +2764,14 @@ class ShortcutApp(APIApplication):
2951
2764
  url = f"{self.base_url}/api/v3/search/iterations"
2952
2765
  query_params = {
2953
2766
  k: v
2954
- for k, v in [
2955
- ("query", query),
2956
- ("page_size", page_size),
2957
- ("detail", detail),
2958
- ("next", next),
2959
- ("entity_types", entity_types),
2960
- ]
2767
+ for k, v in [("query", query), ("page_size", page_size), ("detail", detail), ("next", next), ("entity_types", entity_types)]
2961
2768
  if v is not None
2962
2769
  }
2963
- response = self._get(url, params=query_params)
2770
+ response = await self._aget(url, params=query_params)
2964
2771
  response.raise_for_status()
2965
2772
  return response.json()
2966
2773
 
2967
- def search_milestones(
2968
- self, query, page_size=None, detail=None, next=None, entity_types=None
2969
- ) -> dict[str, Any]:
2774
+ async def search_milestones(self, query, page_size=None, detail=None, next=None, entity_types=None) -> dict[str, Any]:
2970
2775
  """
2971
2776
  Searches for milestones matching the provided query and returns the results as a dictionary.
2972
2777
 
@@ -2992,22 +2797,14 @@ class ShortcutApp(APIApplication):
2992
2797
  url = f"{self.base_url}/api/v3/search/milestones"
2993
2798
  query_params = {
2994
2799
  k: v
2995
- for k, v in [
2996
- ("query", query),
2997
- ("page_size", page_size),
2998
- ("detail", detail),
2999
- ("next", next),
3000
- ("entity_types", entity_types),
3001
- ]
2800
+ for k, v in [("query", query), ("page_size", page_size), ("detail", detail), ("next", next), ("entity_types", entity_types)]
3002
2801
  if v is not None
3003
2802
  }
3004
- response = self._get(url, params=query_params)
2803
+ response = await self._aget(url, params=query_params)
3005
2804
  response.raise_for_status()
3006
2805
  return response.json()
3007
2806
 
3008
- def search_objectives(
3009
- self, query, page_size=None, detail=None, next=None, entity_types=None
3010
- ) -> dict[str, Any]:
2807
+ async def search_objectives(self, query, page_size=None, detail=None, next=None, entity_types=None) -> dict[str, Any]:
3011
2808
  """
3012
2809
  Searches for objectives based on the specified query and returns the search results.
3013
2810
 
@@ -3033,22 +2830,14 @@ class ShortcutApp(APIApplication):
3033
2830
  url = f"{self.base_url}/api/v3/search/objectives"
3034
2831
  query_params = {
3035
2832
  k: v
3036
- for k, v in [
3037
- ("query", query),
3038
- ("page_size", page_size),
3039
- ("detail", detail),
3040
- ("next", next),
3041
- ("entity_types", entity_types),
3042
- ]
2833
+ for k, v in [("query", query), ("page_size", page_size), ("detail", detail), ("next", next), ("entity_types", entity_types)]
3043
2834
  if v is not None
3044
2835
  }
3045
- response = self._get(url, params=query_params)
2836
+ response = await self._aget(url, params=query_params)
3046
2837
  response.raise_for_status()
3047
2838
  return response.json()
3048
2839
 
3049
- def search_stories(
3050
- self, query, page_size=None, detail=None, next=None, entity_types=None
3051
- ) -> dict[str, Any]:
2840
+ async def search_stories(self, query, page_size=None, detail=None, next=None, entity_types=None) -> dict[str, Any]:
3052
2841
  """
3053
2842
  Searches for stories matching the given query and optional filters, returning paginated results from the stories API.
3054
2843
 
@@ -3074,20 +2863,14 @@ class ShortcutApp(APIApplication):
3074
2863
  url = f"{self.base_url}/api/v3/search/stories"
3075
2864
  query_params = {
3076
2865
  k: v
3077
- for k, v in [
3078
- ("query", query),
3079
- ("page_size", page_size),
3080
- ("detail", detail),
3081
- ("next", next),
3082
- ("entity_types", entity_types),
3083
- ]
2866
+ for k, v in [("query", query), ("page_size", page_size), ("detail", detail), ("next", next), ("entity_types", entity_types)]
3084
2867
  if v is not None
3085
2868
  }
3086
- response = self._get(url, params=query_params)
2869
+ response = await self._aget(url, params=query_params)
3087
2870
  response.raise_for_status()
3088
2871
  return response.json()
3089
2872
 
3090
- def create_story(
2873
+ async def create_story(
3091
2874
  self,
3092
2875
  name,
3093
2876
  description=None,
@@ -3205,11 +2988,11 @@ class ShortcutApp(APIApplication):
3205
2988
  request_body = {k: v for k, v in request_body.items() if v is not None}
3206
2989
  url = f"{self.base_url}/api/v3/stories"
3207
2990
  query_params = {}
3208
- response = self._post(url, data=request_body, params=query_params)
2991
+ response = await self._apost(url, data=request_body, params=query_params)
3209
2992
  response.raise_for_status()
3210
2993
  return response.json()
3211
2994
 
3212
- def update_multiple_stories(
2995
+ async def update_multiple_stories(
3213
2996
  self,
3214
2997
  story_ids,
3215
2998
  archived=None,
@@ -3303,11 +3086,11 @@ class ShortcutApp(APIApplication):
3303
3086
  request_body = {k: v for k, v in request_body.items() if v is not None}
3304
3087
  url = f"{self.base_url}/api/v3/stories/bulk"
3305
3088
  query_params = {}
3306
- response = self._put(url, data=request_body, params=query_params)
3089
+ response = await self._aput(url, data=request_body, params=query_params)
3307
3090
  response.raise_for_status()
3308
3091
  return response.json()
3309
3092
 
3310
- def create_multiple_stories(self, stories) -> list[Any]:
3093
+ async def create_multiple_stories(self, stories) -> list[Any]:
3311
3094
  """
3312
3095
  Creates multiple stories in bulk using the API.
3313
3096
 
@@ -3326,17 +3109,15 @@ class ShortcutApp(APIApplication):
3326
3109
  """
3327
3110
  if stories is None:
3328
3111
  raise ValueError("Missing required parameter 'stories'")
3329
- request_body = {
3330
- "stories": stories,
3331
- }
3112
+ request_body = {"stories": stories}
3332
3113
  request_body = {k: v for k, v in request_body.items() if v is not None}
3333
3114
  url = f"{self.base_url}/api/v3/stories/bulk"
3334
3115
  query_params = {}
3335
- response = self._post(url, data=request_body, params=query_params)
3116
+ response = await self._apost(url, data=request_body, params=query_params)
3336
3117
  response.raise_for_status()
3337
3118
  return response.json()
3338
3119
 
3339
- def create_story_from_template(
3120
+ async def create_story_from_template(
3340
3121
  self,
3341
3122
  story_template_id,
3342
3123
  description=None,
@@ -3495,11 +3276,11 @@ class ShortcutApp(APIApplication):
3495
3276
  request_body = {k: v for k, v in request_body.items() if v is not None}
3496
3277
  url = f"{self.base_url}/api/v3/stories/from-template"
3497
3278
  query_params = {}
3498
- response = self._post(url, data=request_body, params=query_params)
3279
+ response = await self._apost(url, data=request_body, params=query_params)
3499
3280
  response.raise_for_status()
3500
3281
  return response.json()
3501
3282
 
3502
- def search_stories_old(
3283
+ async def search_stories_old(
3503
3284
  self,
3504
3285
  archived=None,
3505
3286
  owner_id=None,
@@ -3605,11 +3386,11 @@ class ShortcutApp(APIApplication):
3605
3386
  request_body = {k: v for k, v in request_body.items() if v is not None}
3606
3387
  url = f"{self.base_url}/api/v3/stories/search"
3607
3388
  query_params = {}
3608
- response = self._post(url, data=request_body, params=query_params)
3389
+ response = await self._apost(url, data=request_body, params=query_params)
3609
3390
  response.raise_for_status()
3610
3391
  return response.json()
3611
3392
 
3612
- def get_story(self, story_public_id) -> dict[str, Any]:
3393
+ async def get_story(self, story_public_id) -> dict[str, Any]:
3613
3394
  """
3614
3395
  Retrieves a story from the API based on its public ID
3615
3396
 
@@ -3629,11 +3410,11 @@ class ShortcutApp(APIApplication):
3629
3410
  raise ValueError("Missing required parameter 'story-public-id'")
3630
3411
  url = f"{self.base_url}/api/v3/stories/{story_public_id}"
3631
3412
  query_params = {}
3632
- response = self._get(url, params=query_params)
3413
+ response = await self._aget(url, params=query_params)
3633
3414
  response.raise_for_status()
3634
3415
  return response.json()
3635
3416
 
3636
- def update_story(
3417
+ async def update_story(
3637
3418
  self,
3638
3419
  story_public_id,
3639
3420
  description=None,
@@ -3741,11 +3522,11 @@ class ShortcutApp(APIApplication):
3741
3522
  request_body = {k: v for k, v in request_body.items() if v is not None}
3742
3523
  url = f"{self.base_url}/api/v3/stories/{story_public_id}"
3743
3524
  query_params = {}
3744
- response = self._put(url, data=request_body, params=query_params)
3525
+ response = await self._aput(url, data=request_body, params=query_params)
3745
3526
  response.raise_for_status()
3746
3527
  return response.json()
3747
3528
 
3748
- def delete_story(self, story_public_id) -> Any:
3529
+ async def delete_story(self, story_public_id) -> Any:
3749
3530
  """
3750
3531
  Deletes a story using its public ID.
3751
3532
 
@@ -3766,11 +3547,11 @@ class ShortcutApp(APIApplication):
3766
3547
  raise ValueError("Missing required parameter 'story-public-id'")
3767
3548
  url = f"{self.base_url}/api/v3/stories/{story_public_id}"
3768
3549
  query_params = {}
3769
- response = self._delete(url, params=query_params)
3550
+ response = await self._adelete(url, params=query_params)
3770
3551
  response.raise_for_status()
3771
3552
  return response.json()
3772
3553
 
3773
- def list_story_comment(self, story_public_id) -> list[Any]:
3554
+ async def list_story_comment(self, story_public_id) -> list[Any]:
3774
3555
  """
3775
3556
  Retrieves a list of comments for a specific story.
3776
3557
 
@@ -3791,19 +3572,12 @@ class ShortcutApp(APIApplication):
3791
3572
  raise ValueError("Missing required parameter 'story-public-id'")
3792
3573
  url = f"{self.base_url}/api/v3/stories/{story_public_id}/comments"
3793
3574
  query_params = {}
3794
- response = self._get(url, params=query_params)
3575
+ response = await self._aget(url, params=query_params)
3795
3576
  response.raise_for_status()
3796
3577
  return response.json()
3797
3578
 
3798
- def create_story_comment(
3799
- self,
3800
- story_public_id,
3801
- text,
3802
- author_id=None,
3803
- created_at=None,
3804
- updated_at=None,
3805
- external_id=None,
3806
- parent_id=None,
3579
+ async def create_story_comment(
3580
+ self, story_public_id, text, author_id=None, created_at=None, updated_at=None, external_id=None, parent_id=None
3807
3581
  ) -> dict[str, Any]:
3808
3582
  """
3809
3583
  Creates a new comment on a story by sending a POST request with the comment details to the specified API endpoint.
@@ -3841,11 +3615,11 @@ class ShortcutApp(APIApplication):
3841
3615
  request_body = {k: v for k, v in request_body.items() if v is not None}
3842
3616
  url = f"{self.base_url}/api/v3/stories/{story_public_id}/comments"
3843
3617
  query_params = {}
3844
- response = self._post(url, data=request_body, params=query_params)
3618
+ response = await self._apost(url, data=request_body, params=query_params)
3845
3619
  response.raise_for_status()
3846
3620
  return response.json()
3847
3621
 
3848
- def get_story_comment(self, story_public_id, comment_public_id) -> dict[str, Any]:
3622
+ async def get_story_comment(self, story_public_id, comment_public_id) -> dict[str, Any]:
3849
3623
  """
3850
3624
  Retrieves a specific comment from a story using the API.
3851
3625
 
@@ -3869,13 +3643,11 @@ class ShortcutApp(APIApplication):
3869
3643
  raise ValueError("Missing required parameter 'comment-public-id'")
3870
3644
  url = f"{self.base_url}/api/v3/stories/{story_public_id}/comments/{comment_public_id}"
3871
3645
  query_params = {}
3872
- response = self._get(url, params=query_params)
3646
+ response = await self._aget(url, params=query_params)
3873
3647
  response.raise_for_status()
3874
3648
  return response.json()
3875
3649
 
3876
- def update_story_comment(
3877
- self, story_public_id, comment_public_id, text
3878
- ) -> dict[str, Any]:
3650
+ async def update_story_comment(self, story_public_id, comment_public_id, text) -> dict[str, Any]:
3879
3651
  """
3880
3652
  Updates a story comment with new text based on the provided story and comment public IDs.
3881
3653
 
@@ -3899,17 +3671,15 @@ class ShortcutApp(APIApplication):
3899
3671
  raise ValueError("Missing required parameter 'comment-public-id'")
3900
3672
  if text is None:
3901
3673
  raise ValueError("Missing required parameter 'text'")
3902
- request_body = {
3903
- "text": text,
3904
- }
3674
+ request_body = {"text": text}
3905
3675
  request_body = {k: v for k, v in request_body.items() if v is not None}
3906
3676
  url = f"{self.base_url}/api/v3/stories/{story_public_id}/comments/{comment_public_id}"
3907
3677
  query_params = {}
3908
- response = self._put(url, data=request_body, params=query_params)
3678
+ response = await self._aput(url, data=request_body, params=query_params)
3909
3679
  response.raise_for_status()
3910
3680
  return response.json()
3911
3681
 
3912
- def delete_story_comment(self, story_public_id, comment_public_id) -> Any:
3682
+ async def delete_story_comment(self, story_public_id, comment_public_id) -> Any:
3913
3683
  """
3914
3684
  Deletes a specific comment from a story using the provided story and comment public IDs.
3915
3685
 
@@ -3933,13 +3703,11 @@ class ShortcutApp(APIApplication):
3933
3703
  raise ValueError("Missing required parameter 'comment-public-id'")
3934
3704
  url = f"{self.base_url}/api/v3/stories/{story_public_id}/comments/{comment_public_id}"
3935
3705
  query_params = {}
3936
- response = self._delete(url, params=query_params)
3706
+ response = await self._adelete(url, params=query_params)
3937
3707
  response.raise_for_status()
3938
3708
  return response.json()
3939
3709
 
3940
- def create_story_reaction(
3941
- self, story_public_id, comment_public_id, emoji
3942
- ) -> list[Any]:
3710
+ async def create_story_reaction(self, story_public_id, comment_public_id, emoji) -> list[Any]:
3943
3711
  """
3944
3712
  Creates a reaction with an emoji to a comment on a story.
3945
3713
 
@@ -3963,19 +3731,15 @@ class ShortcutApp(APIApplication):
3963
3731
  raise ValueError("Missing required parameter 'comment-public-id'")
3964
3732
  if emoji is None:
3965
3733
  raise ValueError("Missing required parameter 'emoji'")
3966
- request_body = {
3967
- "emoji": emoji,
3968
- }
3734
+ request_body = {"emoji": emoji}
3969
3735
  request_body = {k: v for k, v in request_body.items() if v is not None}
3970
3736
  url = f"{self.base_url}/api/v3/stories/{story_public_id}/comments/{comment_public_id}/reactions"
3971
3737
  query_params = {}
3972
- response = self._post(url, data=request_body, params=query_params)
3738
+ response = await self._apost(url, data=request_body, params=query_params)
3973
3739
  response.raise_for_status()
3974
3740
  return response.json()
3975
3741
 
3976
- def unlink_comment_thread_from_slack(
3977
- self, story_public_id, comment_public_id
3978
- ) -> dict[str, Any]:
3742
+ async def unlink_comment_thread_from_slack(self, story_public_id, comment_public_id) -> dict[str, Any]:
3979
3743
  """
3980
3744
  Unlinks a comment thread from Slack for a specific story.
3981
3745
 
@@ -3999,11 +3763,11 @@ class ShortcutApp(APIApplication):
3999
3763
  raise ValueError("Missing required parameter 'comment-public-id'")
4000
3764
  url = f"{self.base_url}/api/v3/stories/{story_public_id}/comments/{comment_public_id}/unlink-from-slack"
4001
3765
  query_params = {}
4002
- response = self._post(url, data={}, params=query_params)
3766
+ response = await self._apost(url, data={}, params=query_params)
4003
3767
  response.raise_for_status()
4004
3768
  return response.json()
4005
3769
 
4006
- def story_history(self, story_public_id) -> list[Any]:
3770
+ async def story_history(self, story_public_id) -> list[Any]:
4007
3771
  """
4008
3772
  Retrieves the full change history for a specified story by its public ID.
4009
3773
 
@@ -4024,19 +3788,12 @@ class ShortcutApp(APIApplication):
4024
3788
  raise ValueError("Missing required parameter 'story-public-id'")
4025
3789
  url = f"{self.base_url}/api/v3/stories/{story_public_id}/history"
4026
3790
  query_params = {}
4027
- response = self._get(url, params=query_params)
3791
+ response = await self._aget(url, params=query_params)
4028
3792
  response.raise_for_status()
4029
3793
  return response.json()
4030
3794
 
4031
- def create_task(
4032
- self,
4033
- story_public_id,
4034
- description,
4035
- complete=None,
4036
- owner_ids=None,
4037
- external_id=None,
4038
- created_at=None,
4039
- updated_at=None,
3795
+ async def create_task(
3796
+ self, story_public_id, description, complete=None, owner_ids=None, external_id=None, created_at=None, updated_at=None
4040
3797
  ) -> dict[str, Any]:
4041
3798
  """
4042
3799
  Creates a task within a specified story.
@@ -4075,11 +3832,11 @@ class ShortcutApp(APIApplication):
4075
3832
  request_body = {k: v for k, v in request_body.items() if v is not None}
4076
3833
  url = f"{self.base_url}/api/v3/stories/{story_public_id}/tasks"
4077
3834
  query_params = {}
4078
- response = self._post(url, data=request_body, params=query_params)
3835
+ response = await self._apost(url, data=request_body, params=query_params)
4079
3836
  response.raise_for_status()
4080
3837
  return response.json()
4081
3838
 
4082
- def get_task(self, story_public_id, task_public_id) -> dict[str, Any]:
3839
+ async def get_task(self, story_public_id, task_public_id) -> dict[str, Any]:
4083
3840
  """
4084
3841
  Gets task details for a specific task within a story.
4085
3842
 
@@ -4103,19 +3860,12 @@ class ShortcutApp(APIApplication):
4103
3860
  raise ValueError("Missing required parameter 'task-public-id'")
4104
3861
  url = f"{self.base_url}/api/v3/stories/{story_public_id}/tasks/{task_public_id}"
4105
3862
  query_params = {}
4106
- response = self._get(url, params=query_params)
3863
+ response = await self._aget(url, params=query_params)
4107
3864
  response.raise_for_status()
4108
3865
  return response.json()
4109
3866
 
4110
- def update_task(
4111
- self,
4112
- story_public_id,
4113
- task_public_id,
4114
- description=None,
4115
- owner_ids=None,
4116
- complete=None,
4117
- before_id=None,
4118
- after_id=None,
3867
+ async def update_task(
3868
+ self, story_public_id, task_public_id, description=None, owner_ids=None, complete=None, before_id=None, after_id=None
4119
3869
  ) -> dict[str, Any]:
4120
3870
  """
4121
3871
  Updates the specified task within a story, modifying fields such as description, owners, completion status, and position.
@@ -4153,11 +3903,11 @@ class ShortcutApp(APIApplication):
4153
3903
  request_body = {k: v for k, v in request_body.items() if v is not None}
4154
3904
  url = f"{self.base_url}/api/v3/stories/{story_public_id}/tasks/{task_public_id}"
4155
3905
  query_params = {}
4156
- response = self._put(url, data=request_body, params=query_params)
3906
+ response = await self._aput(url, data=request_body, params=query_params)
4157
3907
  response.raise_for_status()
4158
3908
  return response.json()
4159
3909
 
4160
- def delete_task(self, story_public_id, task_public_id) -> Any:
3910
+ async def delete_task(self, story_public_id, task_public_id) -> Any:
4161
3911
  """
4162
3912
  Deletes a task associated with a story based on their respective public IDs.
4163
3913
 
@@ -4180,11 +3930,11 @@ class ShortcutApp(APIApplication):
4180
3930
  raise ValueError("Missing required parameter 'task-public-id'")
4181
3931
  url = f"{self.base_url}/api/v3/stories/{story_public_id}/tasks/{task_public_id}"
4182
3932
  query_params = {}
4183
- response = self._delete(url, params=query_params)
3933
+ response = await self._adelete(url, params=query_params)
4184
3934
  response.raise_for_status()
4185
3935
  return response.json()
4186
3936
 
4187
- def create_story_link(self, verb, subject_id, object_id) -> dict[str, Any]:
3937
+ async def create_story_link(self, verb, subject_id, object_id) -> dict[str, Any]:
4188
3938
  """
4189
3939
  Creates a story link between a subject and an object with the specified verb by sending a POST request to the story-links API endpoint.
4190
3940
 
@@ -4209,19 +3959,15 @@ class ShortcutApp(APIApplication):
4209
3959
  raise ValueError("Missing required parameter 'subject_id'")
4210
3960
  if object_id is None:
4211
3961
  raise ValueError("Missing required parameter 'object_id'")
4212
- request_body = {
4213
- "verb": verb,
4214
- "subject_id": subject_id,
4215
- "object_id": object_id,
4216
- }
3962
+ request_body = {"verb": verb, "subject_id": subject_id, "object_id": object_id}
4217
3963
  request_body = {k: v for k, v in request_body.items() if v is not None}
4218
3964
  url = f"{self.base_url}/api/v3/story-links"
4219
3965
  query_params = {}
4220
- response = self._post(url, data=request_body, params=query_params)
3966
+ response = await self._apost(url, data=request_body, params=query_params)
4221
3967
  response.raise_for_status()
4222
3968
  return response.json()
4223
3969
 
4224
- def get_story_link(self, story_link_public_id) -> dict[str, Any]:
3970
+ async def get_story_link(self, story_link_public_id) -> dict[str, Any]:
4225
3971
  """
4226
3972
  Retrieves a specific story link by its public ID.
4227
3973
 
@@ -4242,13 +3988,11 @@ class ShortcutApp(APIApplication):
4242
3988
  raise ValueError("Missing required parameter 'story-link-public-id'")
4243
3989
  url = f"{self.base_url}/api/v3/story-links/{story_link_public_id}"
4244
3990
  query_params = {}
4245
- response = self._get(url, params=query_params)
3991
+ response = await self._aget(url, params=query_params)
4246
3992
  response.raise_for_status()
4247
3993
  return response.json()
4248
3994
 
4249
- def update_story_link(
4250
- self, story_link_public_id, verb=None, subject_id=None, object_id=None
4251
- ) -> dict[str, Any]:
3995
+ async def update_story_link(self, story_link_public_id, verb=None, subject_id=None, object_id=None) -> dict[str, Any]:
4252
3996
  """
4253
3997
  Updates an existing story link with new attributes.
4254
3998
 
@@ -4270,19 +4014,15 @@ class ShortcutApp(APIApplication):
4270
4014
  """
4271
4015
  if story_link_public_id is None:
4272
4016
  raise ValueError("Missing required parameter 'story-link-public-id'")
4273
- request_body = {
4274
- "verb": verb,
4275
- "subject_id": subject_id,
4276
- "object_id": object_id,
4277
- }
4017
+ request_body = {"verb": verb, "subject_id": subject_id, "object_id": object_id}
4278
4018
  request_body = {k: v for k, v in request_body.items() if v is not None}
4279
4019
  url = f"{self.base_url}/api/v3/story-links/{story_link_public_id}"
4280
4020
  query_params = {}
4281
- response = self._put(url, data=request_body, params=query_params)
4021
+ response = await self._aput(url, data=request_body, params=query_params)
4282
4022
  response.raise_for_status()
4283
4023
  return response.json()
4284
4024
 
4285
- def delete_story_link(self, story_link_public_id) -> Any:
4025
+ async def delete_story_link(self, story_link_public_id) -> Any:
4286
4026
  """
4287
4027
  Deletes a story link by its public ID.
4288
4028
 
@@ -4303,13 +4043,11 @@ class ShortcutApp(APIApplication):
4303
4043
  raise ValueError("Missing required parameter 'story-link-public-id'")
4304
4044
  url = f"{self.base_url}/api/v3/story-links/{story_link_public_id}"
4305
4045
  query_params = {}
4306
- response = self._delete(url, params=query_params)
4046
+ response = await self._adelete(url, params=query_params)
4307
4047
  response.raise_for_status()
4308
4048
  return response.json()
4309
4049
 
4310
- def list_workflows(
4311
- self,
4312
- ) -> list[Any]:
4050
+ async def list_workflows(self) -> list[Any]:
4313
4051
  """
4314
4052
  Retrieves a list of available workflows from the API.
4315
4053
 
@@ -4327,11 +4065,11 @@ class ShortcutApp(APIApplication):
4327
4065
  """
4328
4066
  url = f"{self.base_url}/api/v3/workflows"
4329
4067
  query_params = {}
4330
- response = self._get(url, params=query_params)
4068
+ response = await self._aget(url, params=query_params)
4331
4069
  response.raise_for_status()
4332
4070
  return response.json()
4333
4071
 
4334
- def get_workflow(self, workflow_public_id) -> dict[str, Any]:
4072
+ async def get_workflow(self, workflow_public_id) -> dict[str, Any]:
4335
4073
  """
4336
4074
  Retrieves detailed information about a workflow given its public ID.
4337
4075
 
@@ -4352,7 +4090,7 @@ class ShortcutApp(APIApplication):
4352
4090
  raise ValueError("Missing required parameter 'workflow-public-id'")
4353
4091
  url = f"{self.base_url}/api/v3/workflows/{workflow_public_id}"
4354
4092
  query_params = {}
4355
- response = self._get(url, params=query_params)
4093
+ response = await self._aget(url, params=query_params)
4356
4094
  response.raise_for_status()
4357
4095
  return response.json()
4358
4096