universal-mcp-applications 0.1.33__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 (113) 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 +86 -24
  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 +98 -202
  41. universal_mcp/applications/google_drive/app.py +194 -793
  42. universal_mcp/applications/google_gemini/app.py +27 -62
  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 +171 -624
  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 +5 -0
  56. universal_mcp/applications/linkedin/app.py +332 -227
  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/app.py +26 -48
  64. universal_mcp/applications/openai/app.py +42 -165
  65. universal_mcp/applications/outlook/README.md +22 -9
  66. universal_mcp/applications/outlook/app.py +403 -141
  67. universal_mcp/applications/perplexity/README.md +2 -1
  68. universal_mcp/applications/perplexity/app.py +162 -20
  69. universal_mcp/applications/pipedrive/app.py +1021 -3331
  70. universal_mcp/applications/posthog/app.py +272 -541
  71. universal_mcp/applications/reddit/app.py +61 -160
  72. universal_mcp/applications/resend/app.py +41 -107
  73. universal_mcp/applications/retell/app.py +23 -50
  74. universal_mcp/applications/rocketlane/app.py +250 -963
  75. universal_mcp/applications/scraper/app.py +67 -125
  76. universal_mcp/applications/semanticscholar/app.py +36 -78
  77. universal_mcp/applications/semrush/app.py +43 -77
  78. universal_mcp/applications/sendgrid/app.py +826 -1576
  79. universal_mcp/applications/sentry/app.py +444 -1079
  80. universal_mcp/applications/serpapi/app.py +40 -143
  81. universal_mcp/applications/sharepoint/app.py +27 -49
  82. universal_mcp/applications/shopify/app.py +1743 -4479
  83. universal_mcp/applications/shortcut/app.py +272 -534
  84. universal_mcp/applications/slack/app.py +41 -123
  85. universal_mcp/applications/spotify/app.py +206 -405
  86. universal_mcp/applications/supabase/app.py +174 -283
  87. universal_mcp/applications/tavily/app.py +2 -2
  88. universal_mcp/applications/trello/app.py +853 -2816
  89. universal_mcp/applications/twilio/app.py +14 -50
  90. universal_mcp/applications/twitter/api_segments/compliance_api.py +4 -14
  91. universal_mcp/applications/twitter/api_segments/dm_conversations_api.py +6 -18
  92. universal_mcp/applications/twitter/api_segments/likes_api.py +1 -3
  93. universal_mcp/applications/twitter/api_segments/lists_api.py +5 -15
  94. universal_mcp/applications/twitter/api_segments/trends_api.py +1 -3
  95. universal_mcp/applications/twitter/api_segments/tweets_api.py +9 -31
  96. universal_mcp/applications/twitter/api_segments/usage_api.py +1 -5
  97. universal_mcp/applications/twitter/api_segments/users_api.py +14 -42
  98. universal_mcp/applications/whatsapp/app.py +35 -186
  99. universal_mcp/applications/whatsapp/audio.py +2 -6
  100. universal_mcp/applications/whatsapp/whatsapp.py +17 -51
  101. universal_mcp/applications/whatsapp_business/app.py +86 -299
  102. universal_mcp/applications/wrike/app.py +80 -153
  103. universal_mcp/applications/yahoo_finance/app.py +19 -65
  104. universal_mcp/applications/youtube/app.py +120 -306
  105. universal_mcp/applications/zenquotes/app.py +3 -3
  106. {universal_mcp_applications-0.1.33.dist-info → universal_mcp_applications-0.1.39rc8.dist-info}/METADATA +4 -2
  107. {universal_mcp_applications-0.1.33.dist-info → universal_mcp_applications-0.1.39rc8.dist-info}/RECORD +109 -113
  108. {universal_mcp_applications-0.1.33.dist-info → universal_mcp_applications-0.1.39rc8.dist-info}/WHEEL +1 -1
  109. universal_mcp/applications/hubspot/api_segments/__init__.py +0 -0
  110. universal_mcp/applications/hubspot/api_segments/api_segment_base.py +0 -54
  111. universal_mcp/applications/hubspot/api_segments/crm_api.py +0 -7337
  112. universal_mcp/applications/hubspot/api_segments/marketing_api.py +0 -1467
  113. {universal_mcp_applications-0.1.33.dist-info → universal_mcp_applications-0.1.39rc8.dist-info}/licenses/LICENSE +0 -0
@@ -1,5 +1,4 @@
1
1
  from typing import Any
2
-
3
2
  from universal_mcp.applications.application import APIApplication
4
3
  from universal_mcp.integrations import Integration
5
4
 
@@ -9,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
 
@@ -27,11 +26,11 @@ class AhrefsApp(APIApplication):
27
26
  """
28
27
  url = f"{self.base_url}/public/crawler-ips"
29
28
  query_params = {k: v for k, v in [("output", output)] if v is not None}
30
- response = self._get(url, params=query_params)
29
+ response = await self._aget(url, params=query_params)
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
 
@@ -49,11 +48,11 @@ class AhrefsApp(APIApplication):
49
48
  """
50
49
  url = f"{self.base_url}/public/crawler-ip-ranges"
51
50
  query_params = {k: v for k, v in [("output", output)] if v is not None}
52
- response = self._get(url, params=query_params)
51
+ response = await self._aget(url, params=query_params)
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
 
@@ -71,19 +70,11 @@ class AhrefsApp(APIApplication):
71
70
  """
72
71
  url = f"{self.base_url}/subscription-info/limits-and-usage"
73
72
  query_params = {k: v for k, v in [("output", output)] if v is not None}
74
- response = self._get(url, params=query_params)
73
+ response = await self._aget(url, params=query_params)
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
 
@@ -120,13 +111,11 @@ class AhrefsApp(APIApplication):
120
111
  request_body = {k: v for k, v in request_body.items() if v is not None}
121
112
  url = f"{self.base_url}/batch-analysis/batch-analysis"
122
113
  query_params = {}
123
- response = self._post(url, data=request_body, params=query_params)
114
+ response = await self._apost(url, data=request_body, params=query_params)
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
 
@@ -167,11 +156,11 @@ class AhrefsApp(APIApplication):
167
156
  ]
168
157
  if v is not None
169
158
  }
170
- response = self._get(url, params=query_params)
159
+ response = await self._aget(url, params=query_params)
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,
@@ -239,11 +228,11 @@ class AhrefsApp(APIApplication):
239
228
  ]
240
229
  if v is not None
241
230
  }
242
- response = self._get(url, params=query_params)
231
+ response = await self._aget(url, params=query_params)
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,
@@ -312,11 +301,11 @@ class AhrefsApp(APIApplication):
312
301
  ]
313
302
  if v is not None
314
303
  }
315
- response = self._get(url, params=query_params)
304
+ response = await self._aget(url, params=query_params)
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
 
@@ -334,11 +323,11 @@ class AhrefsApp(APIApplication):
334
323
  """
335
324
  url = f"{self.base_url}/site-audit/projects"
336
325
  query_params = {k: v for k, v in [("output", output)] if v is not None}
337
- response = self._get(url, params=query_params)
326
+ response = await self._aget(url, params=query_params)
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
- }
376
- response = self._get(url, params=query_params)
355
+ query_params = {k: v for k, v in [("protocol", protocol), ("target", target), ("date", date), ("output", output)] if v is not None}
356
+ response = await self._aget(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
- response = self._get(url, params=query_params)
391
+ response = await self._aget(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
- }
458
- response = self._get(url, params=query_params)
418
+ query_params = {k: v for k, v in [("protocol", protocol), ("mode", mode), ("target", target), ("output", output)] if v is not None}
419
+ response = await self._aget(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
 
@@ -509,19 +461,12 @@ class AhrefsApp(APIApplication):
509
461
  ]
510
462
  if v is not None
511
463
  }
512
- response = self._get(url, params=query_params)
464
+ response = await self._aget(url, params=query_params)
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.
@@ -562,13 +507,11 @@ class AhrefsApp(APIApplication):
562
507
  ]
563
508
  if v is not None
564
509
  }
565
- response = self._get(url, params=query_params)
510
+ response = await self._aget(url, params=query_params)
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
 
@@ -605,13 +548,11 @@ class AhrefsApp(APIApplication):
605
548
  ]
606
549
  if v is not None
607
550
  }
608
- response = self._get(url, params=query_params)
551
+ response = await self._aget(url, params=query_params)
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
 
@@ -648,20 +589,12 @@ class AhrefsApp(APIApplication):
648
589
  ]
649
590
  if v is not None
650
591
  }
651
- response = self._get(url, params=query_params)
592
+ response = await self._aget(url, params=query_params)
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.
@@ -705,11 +638,11 @@ class AhrefsApp(APIApplication):
705
638
  ]
706
639
  if v is not None
707
640
  }
708
- response = self._get(url, params=query_params)
641
+ response = await self._aget(url, params=query_params)
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,
@@ -767,21 +700,12 @@ class AhrefsApp(APIApplication):
767
700
  ]
768
701
  if v is not None
769
702
  }
770
- response = self._get(url, params=query_params)
703
+ response = await self._aget(url, params=query_params)
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.
@@ -827,20 +751,11 @@ class AhrefsApp(APIApplication):
827
751
  ]
828
752
  if v is not None
829
753
  }
830
- response = self._get(url, params=query_params)
754
+ response = await self._aget(url, params=query_params)
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
 
@@ -881,19 +796,11 @@ class AhrefsApp(APIApplication):
881
796
  ]
882
797
  if v is not None
883
798
  }
884
- response = self._get(url, params=query_params)
799
+ response = await self._aget(url, params=query_params)
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
 
@@ -930,11 +837,11 @@ class AhrefsApp(APIApplication):
930
837
  ]
931
838
  if v is not None
932
839
  }
933
- response = self._get(url, params=query_params)
840
+ response = await self._aget(url, params=query_params)
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,
@@ -999,11 +906,11 @@ class AhrefsApp(APIApplication):
999
906
  ]
1000
907
  if v is not None
1001
908
  }
1002
- response = self._get(url, params=query_params)
909
+ response = await self._aget(url, params=query_params)
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,
@@ -1065,11 +972,11 @@ class AhrefsApp(APIApplication):
1065
972
  ]
1066
973
  if v is not None
1067
974
  }
1068
- response = self._get(url, params=query_params)
975
+ response = await self._aget(url, params=query_params)
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,
@@ -1131,11 +1038,11 @@ class AhrefsApp(APIApplication):
1131
1038
  ]
1132
1039
  if v is not None
1133
1040
  }
1134
- response = self._get(url, params=query_params)
1041
+ response = await self._aget(url, params=query_params)
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,
@@ -1197,22 +1104,12 @@ class AhrefsApp(APIApplication):
1197
1104
  ]
1198
1105
  if v is not None
1199
1106
  }
1200
- response = self._get(url, params=query_params)
1107
+ response = await self._aget(url, params=query_params)
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.
@@ -1260,22 +1157,12 @@ class AhrefsApp(APIApplication):
1260
1157
  ]
1261
1158
  if v is not None
1262
1159
  }
1263
- response = self._get(url, params=query_params)
1160
+ response = await self._aget(url, params=query_params)
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.
@@ -1323,22 +1210,12 @@ class AhrefsApp(APIApplication):
1323
1210
  ]
1324
1211
  if v is not None
1325
1212
  }
1326
- response = self._get(url, params=query_params)
1213
+ response = await self._aget(url, params=query_params)
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.
@@ -1386,11 +1263,11 @@ class AhrefsApp(APIApplication):
1386
1263
  ]
1387
1264
  if v is not None
1388
1265
  }
1389
- response = self._get(url, params=query_params)
1266
+ response = await self._aget(url, params=query_params)
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,
@@ -1465,11 +1342,11 @@ class AhrefsApp(APIApplication):
1465
1342
  ]
1466
1343
  if v is not None
1467
1344
  }
1468
- response = self._get(url, params=query_params)
1345
+ response = await self._aget(url, params=query_params)
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,
@@ -1544,11 +1421,11 @@ class AhrefsApp(APIApplication):
1544
1421
  ]
1545
1422
  if v is not None
1546
1423
  }
1547
- response = self._get(url, params=query_params)
1424
+ response = await self._aget(url, params=query_params)
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,
@@ -1621,11 +1498,11 @@ class AhrefsApp(APIApplication):
1621
1498
  ]
1622
1499
  if v is not None
1623
1500
  }
1624
- response = self._get(url, params=query_params)
1501
+ response = await self._aget(url, params=query_params)
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,
@@ -1698,11 +1575,11 @@ class AhrefsApp(APIApplication):
1698
1575
  ]
1699
1576
  if v is not None
1700
1577
  }
1701
- response = self._get(url, params=query_params)
1578
+ response = await self._aget(url, params=query_params)
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,
@@ -1764,22 +1641,12 @@ class AhrefsApp(APIApplication):
1764
1641
  ]
1765
1642
  if v is not None
1766
1643
  }
1767
- response = self._get(url, params=query_params)
1644
+ response = await self._aget(url, params=query_params)
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.
@@ -1827,11 +1694,11 @@ class AhrefsApp(APIApplication):
1827
1694
  ]
1828
1695
  if v is not None
1829
1696
  }
1830
- response = self._get(url, params=query_params)
1697
+ response = await self._aget(url, params=query_params)
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,
@@ -1890,11 +1757,11 @@ class AhrefsApp(APIApplication):
1890
1757
  ]
1891
1758
  if v is not None
1892
1759
  }
1893
- response = self._get(url, params=query_params)
1760
+ response = await self._aget(url, params=query_params)
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,
@@ -1965,11 +1832,11 @@ class AhrefsApp(APIApplication):
1965
1832
  ]
1966
1833
  if v is not None
1967
1834
  }
1968
- response = self._get(url, params=query_params)
1835
+ response = await self._aget(url, params=query_params)
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
- }
2001
- response = self._get(url, params=query_params)
1863
+ query_params = {k: v for k, v in [("country", country), ("keyword", keyword), ("output", output)] if v is not None}
1864
+ response = await self._aget(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
- response = self._get(url, params=query_params)
1893
+ response = await self._aget(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,
@@ -2108,11 +1962,11 @@ class AhrefsApp(APIApplication):
2108
1962
  ]
2109
1963
  if v is not None
2110
1964
  }
2111
- response = self._get(url, params=query_params)
1965
+ response = await self._aget(url, params=query_params)
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,
@@ -2176,11 +2030,11 @@ class AhrefsApp(APIApplication):
2176
2030
  ]
2177
2031
  if v is not None
2178
2032
  }
2179
- response = self._get(url, params=query_params)
2033
+ response = await self._aget(url, params=query_params)
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,
@@ -2242,7 +2096,7 @@ class AhrefsApp(APIApplication):
2242
2096
  ]
2243
2097
  if v is not None
2244
2098
  }
2245
- response = self._get(url, params=query_params)
2099
+ response = await self._aget(url, params=query_params)
2246
2100
  response.raise_for_status()
2247
2101
  return response.json()
2248
2102