universal-mcp-applications 0.1.30rc2__py3-none-any.whl → 0.1.36rc2__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (105) hide show
  1. universal_mcp/applications/ahrefs/app.py +52 -198
  2. universal_mcp/applications/airtable/app.py +23 -122
  3. universal_mcp/applications/apollo/app.py +111 -464
  4. universal_mcp/applications/asana/app.py +417 -1567
  5. universal_mcp/applications/aws_s3/app.py +36 -103
  6. universal_mcp/applications/bill/app.py +546 -1957
  7. universal_mcp/applications/box/app.py +1068 -3981
  8. universal_mcp/applications/braze/app.py +364 -1430
  9. universal_mcp/applications/browser_use/app.py +2 -8
  10. universal_mcp/applications/cal_com_v2/app.py +207 -625
  11. universal_mcp/applications/calendly/app.py +61 -200
  12. universal_mcp/applications/canva/app.py +45 -110
  13. universal_mcp/applications/clickup/app.py +207 -674
  14. universal_mcp/applications/coda/app.py +146 -426
  15. universal_mcp/applications/confluence/app.py +310 -1098
  16. universal_mcp/applications/contentful/app.py +36 -151
  17. universal_mcp/applications/crustdata/app.py +28 -107
  18. universal_mcp/applications/dialpad/app.py +283 -756
  19. universal_mcp/applications/digitalocean/app.py +1766 -5777
  20. universal_mcp/applications/domain_checker/app.py +3 -54
  21. universal_mcp/applications/e2b/app.py +14 -64
  22. universal_mcp/applications/elevenlabs/app.py +9 -47
  23. universal_mcp/applications/exa/app.py +6 -17
  24. universal_mcp/applications/falai/app.py +24 -101
  25. universal_mcp/applications/figma/app.py +53 -137
  26. universal_mcp/applications/file_system/app.py +2 -13
  27. universal_mcp/applications/firecrawl/app.py +51 -152
  28. universal_mcp/applications/fireflies/app.py +59 -281
  29. universal_mcp/applications/fpl/app.py +91 -528
  30. universal_mcp/applications/fpl/utils/fixtures.py +15 -49
  31. universal_mcp/applications/fpl/utils/helper.py +25 -89
  32. universal_mcp/applications/fpl/utils/league_utils.py +20 -64
  33. universal_mcp/applications/ghost_content/app.py +52 -161
  34. universal_mcp/applications/github/app.py +19 -56
  35. universal_mcp/applications/gong/app.py +88 -248
  36. universal_mcp/applications/google_calendar/app.py +16 -68
  37. universal_mcp/applications/google_docs/app.py +88 -188
  38. universal_mcp/applications/google_drive/app.py +141 -463
  39. universal_mcp/applications/google_gemini/app.py +12 -64
  40. universal_mcp/applications/google_mail/app.py +28 -157
  41. universal_mcp/applications/google_searchconsole/app.py +15 -48
  42. universal_mcp/applications/google_sheet/app.py +103 -580
  43. universal_mcp/applications/google_sheet/helper.py +10 -37
  44. universal_mcp/applications/hashnode/app.py +57 -269
  45. universal_mcp/applications/heygen/app.py +44 -122
  46. universal_mcp/applications/http_tools/app.py +10 -32
  47. universal_mcp/applications/hubspot/api_segments/crm_api.py +460 -1573
  48. universal_mcp/applications/hubspot/api_segments/marketing_api.py +74 -262
  49. universal_mcp/applications/hubspot/app.py +23 -87
  50. universal_mcp/applications/jira/app.py +2071 -7986
  51. universal_mcp/applications/klaviyo/app.py +494 -1376
  52. universal_mcp/applications/linkedin/README.md +9 -2
  53. universal_mcp/applications/linkedin/app.py +392 -212
  54. universal_mcp/applications/mailchimp/app.py +450 -1605
  55. universal_mcp/applications/markitdown/app.py +8 -20
  56. universal_mcp/applications/miro/app.py +217 -699
  57. universal_mcp/applications/ms_teams/app.py +64 -186
  58. universal_mcp/applications/neon/app.py +86 -192
  59. universal_mcp/applications/notion/app.py +21 -36
  60. universal_mcp/applications/onedrive/app.py +16 -38
  61. universal_mcp/applications/openai/app.py +42 -165
  62. universal_mcp/applications/outlook/app.py +24 -84
  63. universal_mcp/applications/perplexity/app.py +4 -19
  64. universal_mcp/applications/pipedrive/app.py +832 -3142
  65. universal_mcp/applications/posthog/app.py +163 -432
  66. universal_mcp/applications/reddit/app.py +40 -139
  67. universal_mcp/applications/resend/app.py +41 -107
  68. universal_mcp/applications/retell/app.py +14 -41
  69. universal_mcp/applications/rocketlane/app.py +221 -934
  70. universal_mcp/applications/scraper/README.md +7 -4
  71. universal_mcp/applications/scraper/app.py +216 -102
  72. universal_mcp/applications/semanticscholar/app.py +22 -64
  73. universal_mcp/applications/semrush/app.py +43 -77
  74. universal_mcp/applications/sendgrid/app.py +512 -1262
  75. universal_mcp/applications/sentry/app.py +271 -906
  76. universal_mcp/applications/serpapi/app.py +40 -143
  77. universal_mcp/applications/sharepoint/app.py +17 -39
  78. universal_mcp/applications/shopify/app.py +1551 -4287
  79. universal_mcp/applications/shortcut/app.py +155 -417
  80. universal_mcp/applications/slack/app.py +50 -101
  81. universal_mcp/applications/spotify/app.py +126 -325
  82. universal_mcp/applications/supabase/app.py +104 -213
  83. universal_mcp/applications/tavily/app.py +1 -1
  84. universal_mcp/applications/trello/app.py +693 -2656
  85. universal_mcp/applications/twilio/app.py +14 -50
  86. universal_mcp/applications/twitter/api_segments/compliance_api.py +4 -14
  87. universal_mcp/applications/twitter/api_segments/dm_conversations_api.py +6 -18
  88. universal_mcp/applications/twitter/api_segments/likes_api.py +1 -3
  89. universal_mcp/applications/twitter/api_segments/lists_api.py +5 -15
  90. universal_mcp/applications/twitter/api_segments/trends_api.py +1 -3
  91. universal_mcp/applications/twitter/api_segments/tweets_api.py +9 -31
  92. universal_mcp/applications/twitter/api_segments/usage_api.py +1 -5
  93. universal_mcp/applications/twitter/api_segments/users_api.py +14 -42
  94. universal_mcp/applications/whatsapp/app.py +35 -186
  95. universal_mcp/applications/whatsapp/audio.py +2 -6
  96. universal_mcp/applications/whatsapp/whatsapp.py +17 -51
  97. universal_mcp/applications/whatsapp_business/app.py +70 -283
  98. universal_mcp/applications/wrike/app.py +45 -118
  99. universal_mcp/applications/yahoo_finance/app.py +19 -65
  100. universal_mcp/applications/youtube/app.py +75 -261
  101. universal_mcp/applications/zenquotes/app.py +2 -2
  102. {universal_mcp_applications-0.1.30rc2.dist-info → universal_mcp_applications-0.1.36rc2.dist-info}/METADATA +2 -2
  103. {universal_mcp_applications-0.1.30rc2.dist-info → universal_mcp_applications-0.1.36rc2.dist-info}/RECORD +105 -105
  104. {universal_mcp_applications-0.1.30rc2.dist-info → universal_mcp_applications-0.1.36rc2.dist-info}/WHEEL +0 -0
  105. {universal_mcp_applications-0.1.30rc2.dist-info → universal_mcp_applications-0.1.36rc2.dist-info}/licenses/LICENSE +0 -0
@@ -1,5 +1,4 @@
1
1
  from typing import Any
2
-
3
2
  from universal_mcp.applications.application import APIApplication
4
3
  from universal_mcp.integrations import Integration
5
4
 
@@ -9,7 +8,7 @@ class AhrefsApp(APIApplication):
9
8
  super().__init__(name="ahrefs", integration=integration, **kwargs)
10
9
  self.base_url = "https://api.ahrefs.com/v3"
11
10
 
12
- def crawler_ips(self, output=None) -> dict[str, Any]:
11
+ async def crawler_ips(self, output=None) -> dict[str, Any]:
13
12
  """
14
13
  Retrieve the list of public crawler IP addresses from the API.
15
14
 
@@ -31,7 +30,7 @@ class AhrefsApp(APIApplication):
31
30
  response.raise_for_status()
32
31
  return response.json()
33
32
 
34
- def crawler_ip_ranges(self, output=None) -> dict[str, Any]:
33
+ async def crawler_ip_ranges(self, output=None) -> dict[str, Any]:
35
34
  """
36
35
  Fetches the current public crawler IP ranges from the API, optionally specifying output format.
37
36
 
@@ -53,7 +52,7 @@ class AhrefsApp(APIApplication):
53
52
  response.raise_for_status()
54
53
  return response.json()
55
54
 
56
- def limits_and_usage(self, output=None) -> dict[str, Any]:
55
+ async def limits_and_usage(self, output=None) -> dict[str, Any]:
57
56
  """
58
57
  Retrieves current API subscription limits and usage statistics from the service.
59
58
 
@@ -75,15 +74,7 @@ class AhrefsApp(APIApplication):
75
74
  response.raise_for_status()
76
75
  return response.json()
77
76
 
78
- def batch_analysis(
79
- self,
80
- select,
81
- targets,
82
- order_by=None,
83
- country=None,
84
- volume_mode=None,
85
- output=None,
86
- ) -> dict[str, Any]:
77
+ async def batch_analysis(self, select, targets, order_by=None, country=None, volume_mode=None, output=None) -> dict[str, Any]:
87
78
  """
88
79
  Submits a batch analysis request with specified parameters and returns the analysis results as a dictionary.
89
80
 
@@ -124,9 +115,7 @@ class AhrefsApp(APIApplication):
124
115
  response.raise_for_status()
125
116
  return response.json()
126
117
 
127
- def serp_overview(
128
- self, select, country, keyword, top_positions=None, date=None, output=None
129
- ) -> dict[str, Any]:
118
+ async def serp_overview(self, select, country, keyword, top_positions=None, date=None, output=None) -> dict[str, Any]:
130
119
  """
131
120
  Retrieves a SERP (Search Engine Results Page) overview report based on specified selection, country, and keyword criteria.
132
121
 
@@ -171,7 +160,7 @@ class AhrefsApp(APIApplication):
171
160
  response.raise_for_status()
172
161
  return response.json()
173
162
 
174
- def overview(
163
+ async def overview(
175
164
  self,
176
165
  select,
177
166
  date,
@@ -243,7 +232,7 @@ class AhrefsApp(APIApplication):
243
232
  response.raise_for_status()
244
233
  return response.json()
245
234
 
246
- def competitors_overview(
235
+ async def competitors_overview(
247
236
  self,
248
237
  select,
249
238
  date,
@@ -316,7 +305,7 @@ class AhrefsApp(APIApplication):
316
305
  response.raise_for_status()
317
306
  return response.json()
318
307
 
319
- def projects(self, output=None) -> dict[str, Any]:
308
+ async def projects(self, output=None) -> dict[str, Any]:
320
309
  """
321
310
  Retrieves a list of site audit projects from the configured base URL, optionally specifying an output format.
322
311
 
@@ -338,7 +327,7 @@ class AhrefsApp(APIApplication):
338
327
  response.raise_for_status()
339
328
  return response.json()
340
329
 
341
- def domain_rating(self, target, date, protocol=None, output=None) -> dict[str, Any]:
330
+ async def domain_rating(self, target, date, protocol=None, output=None) -> dict[str, Any]:
342
331
  """
343
332
  Fetches the domain rating and related metrics for a specified target and date.
344
333
 
@@ -363,23 +352,12 @@ class AhrefsApp(APIApplication):
363
352
  if date is None:
364
353
  raise ValueError("Missing required parameter 'date'")
365
354
  url = f"{self.base_url}/site-explorer/domain-rating"
366
- query_params = {
367
- k: v
368
- for k, v in [
369
- ("protocol", protocol),
370
- ("target", target),
371
- ("date", date),
372
- ("output", output),
373
- ]
374
- if v is not None
375
- }
355
+ query_params = {k: v for k, v in [("protocol", protocol), ("target", target), ("date", date), ("output", output)] if v is not None}
376
356
  response = self._get(url, params=query_params)
377
357
  response.raise_for_status()
378
358
  return response.json()
379
359
 
380
- def backlinks_stats(
381
- self, target, date, protocol=None, mode=None, output=None
382
- ) -> dict[str, Any]:
360
+ async def backlinks_stats(self, target, date, protocol=None, mode=None, output=None) -> dict[str, Any]:
383
361
  """
384
362
  Retrieves backlink statistics for a specified target and date, with optional filters for protocol, mode, and output format.
385
363
 
@@ -407,22 +385,14 @@ class AhrefsApp(APIApplication):
407
385
  url = f"{self.base_url}/site-explorer/backlinks-stats"
408
386
  query_params = {
409
387
  k: v
410
- for k, v in [
411
- ("protocol", protocol),
412
- ("target", target),
413
- ("mode", mode),
414
- ("date", date),
415
- ("output", output),
416
- ]
388
+ for k, v in [("protocol", protocol), ("target", target), ("mode", mode), ("date", date), ("output", output)]
417
389
  if v is not None
418
390
  }
419
391
  response = self._get(url, params=query_params)
420
392
  response.raise_for_status()
421
393
  return response.json()
422
394
 
423
- def outlinks_stats(
424
- self, target, protocol=None, mode=None, output=None
425
- ) -> dict[str, Any]:
395
+ async def outlinks_stats(self, target, protocol=None, mode=None, output=None) -> dict[str, Any]:
426
396
  """
427
397
  Retrieves outbound link statistics for the specified target from the site explorer API.
428
398
 
@@ -445,30 +415,12 @@ class AhrefsApp(APIApplication):
445
415
  if target is None:
446
416
  raise ValueError("Missing required parameter 'target'")
447
417
  url = f"{self.base_url}/site-explorer/outlinks-stats"
448
- query_params = {
449
- k: v
450
- for k, v in [
451
- ("protocol", protocol),
452
- ("mode", mode),
453
- ("target", target),
454
- ("output", output),
455
- ]
456
- if v is not None
457
- }
418
+ query_params = {k: v for k, v in [("protocol", protocol), ("mode", mode), ("target", target), ("output", output)] if v is not None}
458
419
  response = self._get(url, params=query_params)
459
420
  response.raise_for_status()
460
421
  return response.json()
461
422
 
462
- def metrics(
463
- self,
464
- target,
465
- date,
466
- volume_mode=None,
467
- country=None,
468
- protocol=None,
469
- mode=None,
470
- output=None,
471
- ) -> dict[str, Any]:
423
+ async def metrics(self, target, date, volume_mode=None, country=None, protocol=None, mode=None, output=None) -> dict[str, Any]:
472
424
  """
473
425
  Retrieves metrics data from the site explorer API endpoint.
474
426
 
@@ -513,15 +465,8 @@ class AhrefsApp(APIApplication):
513
465
  response.raise_for_status()
514
466
  return response.json()
515
467
 
516
- def refdomains_history(
517
- self,
518
- date_from,
519
- target,
520
- history_grouping=None,
521
- date_to=None,
522
- protocol=None,
523
- mode=None,
524
- output=None,
468
+ async def refdomains_history(
469
+ self, date_from, target, history_grouping=None, date_to=None, protocol=None, mode=None, output=None
525
470
  ) -> dict[str, Any]:
526
471
  """
527
472
  Retrieves the historical data of reference domains from a specified site.
@@ -566,9 +511,7 @@ class AhrefsApp(APIApplication):
566
511
  response.raise_for_status()
567
512
  return response.json()
568
513
 
569
- def domain_rating_history(
570
- self, date_from, target, history_grouping=None, date_to=None, output=None
571
- ) -> dict[str, Any]:
514
+ async def domain_rating_history(self, date_from, target, history_grouping=None, date_to=None, output=None) -> dict[str, Any]:
572
515
  """
573
516
  Retrieves historical domain rating data for a specified target within a given date range.
574
517
 
@@ -609,9 +552,7 @@ class AhrefsApp(APIApplication):
609
552
  response.raise_for_status()
610
553
  return response.json()
611
554
 
612
- def url_rating_history(
613
- self, date_from, target, history_grouping=None, date_to=None, output=None
614
- ) -> dict[str, Any]:
555
+ async def url_rating_history(self, date_from, target, history_grouping=None, date_to=None, output=None) -> dict[str, Any]:
615
556
  """
616
557
  Retrieves URL rating history data for a specified target within a date range.
617
558
 
@@ -652,16 +593,8 @@ class AhrefsApp(APIApplication):
652
593
  response.raise_for_status()
653
594
  return response.json()
654
595
 
655
- def pages_history(
656
- self,
657
- date_from,
658
- target,
659
- history_grouping=None,
660
- date_to=None,
661
- country=None,
662
- protocol=None,
663
- mode=None,
664
- output=None,
596
+ async def pages_history(
597
+ self, date_from, target, history_grouping=None, date_to=None, country=None, protocol=None, mode=None, output=None
665
598
  ) -> dict[str, Any]:
666
599
  """
667
600
  Retrieves historical page data for a target using specified filters.
@@ -709,7 +642,7 @@ class AhrefsApp(APIApplication):
709
642
  response.raise_for_status()
710
643
  return response.json()
711
644
 
712
- def metrics_history(
645
+ async def metrics_history(
713
646
  self,
714
647
  date_from,
715
648
  target,
@@ -771,17 +704,8 @@ class AhrefsApp(APIApplication):
771
704
  response.raise_for_status()
772
705
  return response.json()
773
706
 
774
- def keywords_history(
775
- self,
776
- date_from,
777
- target,
778
- select=None,
779
- history_grouping=None,
780
- date_to=None,
781
- country=None,
782
- protocol=None,
783
- mode=None,
784
- output=None,
707
+ async def keywords_history(
708
+ self, date_from, target, select=None, history_grouping=None, date_to=None, country=None, protocol=None, mode=None, output=None
785
709
  ) -> dict[str, Any]:
786
710
  """
787
711
  Fetches the historical keyword rankings and performance data for a specified target within an optional date range and set of filters.
@@ -831,16 +755,7 @@ class AhrefsApp(APIApplication):
831
755
  response.raise_for_status()
832
756
  return response.json()
833
757
 
834
- def metrics_by_country(
835
- self,
836
- target,
837
- date,
838
- volume_mode=None,
839
- limit=None,
840
- protocol=None,
841
- mode=None,
842
- output=None,
843
- ) -> dict[str, Any]:
758
+ async def metrics_by_country(self, target, date, volume_mode=None, limit=None, protocol=None, mode=None, output=None) -> dict[str, Any]:
844
759
  """
845
760
  Fetches site metrics grouped by country for a specified target and date.
846
761
 
@@ -885,15 +800,7 @@ class AhrefsApp(APIApplication):
885
800
  response.raise_for_status()
886
801
  return response.json()
887
802
 
888
- def pages_by_traffic(
889
- self,
890
- target,
891
- volume_mode=None,
892
- country=None,
893
- protocol=None,
894
- mode=None,
895
- output=None,
896
- ) -> dict[str, Any]:
803
+ async def pages_by_traffic(self, target, volume_mode=None, country=None, protocol=None, mode=None, output=None) -> dict[str, Any]:
897
804
  """
898
805
  Retrieves a list of top pages for a specified target domain or URL, ranked by estimated organic search traffic.
899
806
 
@@ -934,7 +841,7 @@ class AhrefsApp(APIApplication):
934
841
  response.raise_for_status()
935
842
  return response.json()
936
843
 
937
- def all_backlinks(
844
+ async def all_backlinks(
938
845
  self,
939
846
  select,
940
847
  target,
@@ -1003,7 +910,7 @@ class AhrefsApp(APIApplication):
1003
910
  response.raise_for_status()
1004
911
  return response.json()
1005
912
 
1006
- def broken_backlinks(
913
+ async def broken_backlinks(
1007
914
  self,
1008
915
  select,
1009
916
  target,
@@ -1069,7 +976,7 @@ class AhrefsApp(APIApplication):
1069
976
  response.raise_for_status()
1070
977
  return response.json()
1071
978
 
1072
- def refdomains(
979
+ async def refdomains(
1073
980
  self,
1074
981
  select,
1075
982
  target,
@@ -1135,7 +1042,7 @@ class AhrefsApp(APIApplication):
1135
1042
  response.raise_for_status()
1136
1043
  return response.json()
1137
1044
 
1138
- def anchors(
1045
+ async def anchors(
1139
1046
  self,
1140
1047
  select,
1141
1048
  target,
@@ -1201,18 +1108,8 @@ class AhrefsApp(APIApplication):
1201
1108
  response.raise_for_status()
1202
1109
  return response.json()
1203
1110
 
1204
- def linkeddomains(
1205
- self,
1206
- select,
1207
- target,
1208
- timeout=None,
1209
- offset=None,
1210
- limit=None,
1211
- order_by=None,
1212
- where=None,
1213
- protocol=None,
1214
- mode=None,
1215
- output=None,
1111
+ async def linkeddomains(
1112
+ self, select, target, timeout=None, offset=None, limit=None, order_by=None, where=None, protocol=None, mode=None, output=None
1216
1113
  ) -> dict[str, Any]:
1217
1114
  """
1218
1115
  Retrieves linked domains for a specified target using the site explorer API endpoint.
@@ -1264,18 +1161,8 @@ class AhrefsApp(APIApplication):
1264
1161
  response.raise_for_status()
1265
1162
  return response.json()
1266
1163
 
1267
- def linked_anchors_external(
1268
- self,
1269
- select,
1270
- target,
1271
- timeout=None,
1272
- offset=None,
1273
- limit=None,
1274
- order_by=None,
1275
- where=None,
1276
- protocol=None,
1277
- mode=None,
1278
- output=None,
1164
+ async def linked_anchors_external(
1165
+ self, select, target, timeout=None, offset=None, limit=None, order_by=None, where=None, protocol=None, mode=None, output=None
1279
1166
  ) -> dict[str, Any]:
1280
1167
  """
1281
1168
  Fetch linked external anchor data for a specified target using provided selection and filtering criteria.
@@ -1327,18 +1214,8 @@ class AhrefsApp(APIApplication):
1327
1214
  response.raise_for_status()
1328
1215
  return response.json()
1329
1216
 
1330
- def linked_anchors_internal(
1331
- self,
1332
- select,
1333
- target,
1334
- timeout=None,
1335
- offset=None,
1336
- limit=None,
1337
- order_by=None,
1338
- where=None,
1339
- protocol=None,
1340
- mode=None,
1341
- output=None,
1217
+ async def linked_anchors_internal(
1218
+ self, select, target, timeout=None, offset=None, limit=None, order_by=None, where=None, protocol=None, mode=None, output=None
1342
1219
  ) -> dict[str, Any]:
1343
1220
  """
1344
1221
  Fetches internal linked anchor data for a specified target from the site explorer API, applying optional filtering and query parameters.
@@ -1390,7 +1267,7 @@ class AhrefsApp(APIApplication):
1390
1267
  response.raise_for_status()
1391
1268
  return response.json()
1392
1269
 
1393
- def organic_keywords(
1270
+ async def organic_keywords(
1394
1271
  self,
1395
1272
  select,
1396
1273
  target,
@@ -1469,7 +1346,7 @@ class AhrefsApp(APIApplication):
1469
1346
  response.raise_for_status()
1470
1347
  return response.json()
1471
1348
 
1472
- def organic_competitors(
1349
+ async def organic_competitors(
1473
1350
  self,
1474
1351
  select,
1475
1352
  target,
@@ -1548,7 +1425,7 @@ class AhrefsApp(APIApplication):
1548
1425
  response.raise_for_status()
1549
1426
  return response.json()
1550
1427
 
1551
- def top_pages(
1428
+ async def top_pages(
1552
1429
  self,
1553
1430
  select,
1554
1431
  target,
@@ -1625,7 +1502,7 @@ class AhrefsApp(APIApplication):
1625
1502
  response.raise_for_status()
1626
1503
  return response.json()
1627
1504
 
1628
- def paid_pages(
1505
+ async def paid_pages(
1629
1506
  self,
1630
1507
  select,
1631
1508
  target,
@@ -1702,7 +1579,7 @@ class AhrefsApp(APIApplication):
1702
1579
  response.raise_for_status()
1703
1580
  return response.json()
1704
1581
 
1705
- def best_by_external_links(
1582
+ async def best_by_external_links(
1706
1583
  self,
1707
1584
  select,
1708
1585
  target,
@@ -1768,18 +1645,8 @@ class AhrefsApp(APIApplication):
1768
1645
  response.raise_for_status()
1769
1646
  return response.json()
1770
1647
 
1771
- def best_by_internal_links(
1772
- self,
1773
- select,
1774
- target,
1775
- timeout=None,
1776
- offset=None,
1777
- limit=None,
1778
- order_by=None,
1779
- where=None,
1780
- protocol=None,
1781
- mode=None,
1782
- output=None,
1648
+ async def best_by_internal_links(
1649
+ self, select, target, timeout=None, offset=None, limit=None, order_by=None, where=None, protocol=None, mode=None, output=None
1783
1650
  ) -> dict[str, Any]:
1784
1651
  """
1785
1652
  Retrieves the best-performing internal links for a specified target using the site explorer API endpoint.
@@ -1831,7 +1698,7 @@ class AhrefsApp(APIApplication):
1831
1698
  response.raise_for_status()
1832
1699
  return response.json()
1833
1700
 
1834
- def total_search_volume_history(
1701
+ async def total_search_volume_history(
1835
1702
  self,
1836
1703
  date_from,
1837
1704
  target,
@@ -1894,7 +1761,7 @@ class AhrefsApp(APIApplication):
1894
1761
  response.raise_for_status()
1895
1762
  return response.json()
1896
1763
 
1897
- def keyword_explorer_overview(
1764
+ async def keyword_explorer_overview(
1898
1765
  self,
1899
1766
  select,
1900
1767
  country,
@@ -1969,7 +1836,7 @@ class AhrefsApp(APIApplication):
1969
1836
  response.raise_for_status()
1970
1837
  return response.json()
1971
1838
 
1972
- def volume_history(self, country, keyword, output=None) -> dict[str, Any]:
1839
+ async def volume_history(self, country, keyword, output=None) -> dict[str, Any]:
1973
1840
  """
1974
1841
  Fetches the historical search volume for a given keyword in a specified country.
1975
1842
 
@@ -1993,18 +1860,12 @@ class AhrefsApp(APIApplication):
1993
1860
  if keyword is None:
1994
1861
  raise ValueError("Missing required parameter 'keyword'")
1995
1862
  url = f"{self.base_url}/keywords-explorer/volume-history"
1996
- query_params = {
1997
- k: v
1998
- for k, v in [("country", country), ("keyword", keyword), ("output", output)]
1999
- if v is not None
2000
- }
1863
+ query_params = {k: v for k, v in [("country", country), ("keyword", keyword), ("output", output)] if v is not None}
2001
1864
  response = self._get(url, params=query_params)
2002
1865
  response.raise_for_status()
2003
1866
  return response.json()
2004
1867
 
2005
- def volume_by_country(
2006
- self, keyword, limit=None, search_engine=None, output=None
2007
- ) -> dict[str, Any]:
1868
+ async def volume_by_country(self, keyword, limit=None, search_engine=None, output=None) -> dict[str, Any]:
2008
1869
  """
2009
1870
  Retrieves search volume by country for a given keyword.
2010
1871
 
@@ -2027,20 +1888,13 @@ class AhrefsApp(APIApplication):
2027
1888
  raise ValueError("Missing required parameter 'keyword'")
2028
1889
  url = f"{self.base_url}/keywords-explorer/volume-by-country"
2029
1890
  query_params = {
2030
- k: v
2031
- for k, v in [
2032
- ("limit", limit),
2033
- ("search_engine", search_engine),
2034
- ("keyword", keyword),
2035
- ("output", output),
2036
- ]
2037
- if v is not None
1891
+ k: v for k, v in [("limit", limit), ("search_engine", search_engine), ("keyword", keyword), ("output", output)] if v is not None
2038
1892
  }
2039
1893
  response = self._get(url, params=query_params)
2040
1894
  response.raise_for_status()
2041
1895
  return response.json()
2042
1896
 
2043
- def matching_terms(
1897
+ async def matching_terms(
2044
1898
  self,
2045
1899
  select,
2046
1900
  country,
@@ -2112,7 +1966,7 @@ class AhrefsApp(APIApplication):
2112
1966
  response.raise_for_status()
2113
1967
  return response.json()
2114
1968
 
2115
- def related_terms(
1969
+ async def related_terms(
2116
1970
  self,
2117
1971
  select,
2118
1972
  country,
@@ -2180,7 +2034,7 @@ class AhrefsApp(APIApplication):
2180
2034
  response.raise_for_status()
2181
2035
  return response.json()
2182
2036
 
2183
- def search_suggestions(
2037
+ async def search_suggestions(
2184
2038
  self,
2185
2039
  select,
2186
2040
  country,