getanyapi 0.40.2__tar.gz → 0.42.0__tar.gz

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 (103) hide show
  1. {getanyapi-0.40.2 → getanyapi-0.42.0}/PKG-INFO +1 -1
  2. {getanyapi-0.40.2 → getanyapi-0.42.0}/pyproject.toml +1 -1
  3. {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/__init__.py +1 -1
  4. {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/amazon.py +32 -0
  5. {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/appstore.py +3 -1
  6. {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/capterra.py +14 -0
  7. {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/chatgpt.py +38 -0
  8. {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/email.py +9 -1
  9. {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/g2.py +14 -0
  10. {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/google.py +10 -6
  11. {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/google_shopping.py +18 -0
  12. {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/instagram.py +33 -3
  13. {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/linkedin.py +637 -1
  14. {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/maps.py +64 -0
  15. {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/playstore.py +2 -0
  16. {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/reddit.py +140 -18
  17. getanyapi-0.42.0/src/getanyapi/platforms/substack.py +399 -0
  18. {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/tiktok.py +41 -6
  19. {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/tripadvisor.py +25 -0
  20. {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/trustpilot.py +3 -1
  21. {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/twitter.py +89 -11
  22. {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/walmart.py +19 -1
  23. {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/yelp.py +29 -1
  24. {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/youtube.py +5 -3
  25. getanyapi-0.40.2/src/getanyapi/platforms/substack.py +0 -168
  26. {getanyapi-0.40.2 → getanyapi-0.42.0}/.gitignore +0 -0
  27. {getanyapi-0.40.2 → getanyapi-0.42.0}/README.md +0 -0
  28. {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/_account.py +0 -0
  29. {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/_async_client.py +0 -0
  30. {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/_client.py +0 -0
  31. {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/_errors.py +0 -0
  32. {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/_idempotency.py +0 -0
  33. {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/_pagination.py +0 -0
  34. {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/_transport.py +0 -0
  35. {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/discovery_types.py +0 -0
  36. {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/__init__.py +0 -0
  37. {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/ahrefs.py +0 -0
  38. {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/airbnb.py +0 -0
  39. {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/alibaba.py +0 -0
  40. {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/apollo.py +0 -0
  41. {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/bluesky.py +0 -0
  42. {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/booking.py +0 -0
  43. {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/coinmarketcap.py +0 -0
  44. {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/company.py +0 -0
  45. {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/company_enrichment.py +0 -0
  46. {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/company_search.py +0 -0
  47. {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/congress.py +0 -0
  48. {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/dexscreener.py +0 -0
  49. {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/douyin.py +0 -0
  50. {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/ebay.py +0 -0
  51. {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/email_finding.py +0 -0
  52. {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/email_verification.py +0 -0
  53. {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/facebook.py +0 -0
  54. {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/fiverr.py +0 -0
  55. {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/gemini.py +0 -0
  56. {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/github.py +0 -0
  57. {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/glassdoor.py +0 -0
  58. {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/google_ads.py +0 -0
  59. {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/google_finance.py +0 -0
  60. {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/hackernews.py +0 -0
  61. {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/indeed.py +0 -0
  62. {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/job_search.py +0 -0
  63. {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/mobile_phone.py +0 -0
  64. {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/naver.py +0 -0
  65. {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/nextdoor.py +0 -0
  66. {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/people_search.py +0 -0
  67. {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/perplexity.py +0 -0
  68. {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/person.py +0 -0
  69. {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/person_enrichment.py +0 -0
  70. {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/pinterest.py +0 -0
  71. {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/polymarket.py +0 -0
  72. {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/realtor.py +0 -0
  73. {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/redfin.py +0 -0
  74. {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/rednote.py +0 -0
  75. {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/sec.py +0 -0
  76. {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/semrush.py +0 -0
  77. {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/seo.py +0 -0
  78. {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/snapchat.py +0 -0
  79. {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/social.py +0 -0
  80. {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/spotify.py +0 -0
  81. {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/technographics.py +0 -0
  82. {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/threads.py +0 -0
  83. {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/tiktok_shop.py +0 -0
  84. {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/truthsocial.py +0 -0
  85. {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/upwork.py +0 -0
  86. {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/web.py +0 -0
  87. {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/weibo.py +0 -0
  88. {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/yahoo_finance.py +0 -0
  89. {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/zhihu.py +0 -0
  90. {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/zillow.py +0 -0
  91. {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/py.typed +0 -0
  92. {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/types.py +0 -0
  93. {getanyapi-0.40.2 → getanyapi-0.42.0}/tests/conftest.py +0 -0
  94. {getanyapi-0.40.2 → getanyapi-0.42.0}/tests/test_account.py +0 -0
  95. {getanyapi-0.40.2 → getanyapi-0.42.0}/tests/test_client.py +0 -0
  96. {getanyapi-0.40.2 → getanyapi-0.42.0}/tests/test_durable_requests.py +0 -0
  97. {getanyapi-0.40.2 → getanyapi-0.42.0}/tests/test_envelope.py +0 -0
  98. {getanyapi-0.40.2 → getanyapi-0.42.0}/tests/test_errors.py +0 -0
  99. {getanyapi-0.40.2 → getanyapi-0.42.0}/tests/test_fixture_roundtrip.py +0 -0
  100. {getanyapi-0.40.2 → getanyapi-0.42.0}/tests/test_fixture_sweep.py +0 -0
  101. {getanyapi-0.40.2 → getanyapi-0.42.0}/tests/test_pagination.py +0 -0
  102. {getanyapi-0.40.2 → getanyapi-0.42.0}/tests/test_transport.py +0 -0
  103. {getanyapi-0.40.2 → getanyapi-0.42.0}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: getanyapi
3
- Version: 0.40.2
3
+ Version: 0.42.0
4
4
  Summary: Official typed Python SDK for AnyAPI: any API, one wallet, USD, no subscriptions.
5
5
  Project-URL: Homepage, https://getanyapi.com
6
6
  Project-URL: Documentation, https://getanyapi.com/docs
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "getanyapi"
7
- version = "0.40.2"
7
+ version = "0.42.0"
8
8
  description = "Official typed Python SDK for AnyAPI: any API, one wallet, USD, no subscriptions."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"
@@ -54,7 +54,7 @@ from .types import (
54
54
  unwrap,
55
55
  )
56
56
 
57
- __version__ = "0.40.2"
57
+ __version__ = "0.42.0"
58
58
 
59
59
  __all__ = [
60
60
  # clients + top-level functions
@@ -44,6 +44,24 @@ class AmazonProductInput(TypedDict, total=False):
44
44
 
45
45
  preferLatencyUnderMs: NotRequired[int]
46
46
  """Optional; omit it and routing is unchanged, with the cheapest source serving. Prefer sources whose typical response time (median over the trailing 30 days, as published on this endpoint's lane health) is under this many milliseconds; among those, the cheapest serves. This can raise your price: when the cheapest source misses the target, a faster and dearer one serves, and you are quoted and charged its price. If no source is that fast the request is still served, by whichever source offers the best speed for its price - it is never refused for being slow. Sources we have not timed are tried last. This is a preference, not a guarantee: the median describes past requests and is not a ceiling on this one, and it excludes any wait this request itself asks for. On a paginated walk it applies to the first page only: later pages stay with the source that page chose, at the price it was quoted. Minimum: 1."""
47
+ requireFields: NotRequired[
48
+ list[
49
+ Literal[
50
+ "category",
51
+ "condition",
52
+ "currency",
53
+ "description",
54
+ "features",
55
+ "images",
56
+ "inStock",
57
+ "price",
58
+ "rating",
59
+ "reviewsCount",
60
+ "sellerName",
61
+ ]
62
+ ]
63
+ ]
64
+ """Optional; omit it and routing is unchanged, with the cheapest source serving. Name the output fields this request must be able to return, for example `category` or `condition`, and it is served only by a source that returns every one of them. Fields you do not name are still returned whenever the serving source has them. This can raise your price: when the cheapest source cannot return a named field, a dearer source serves, and you are quoted and charged its price. A named field can still be absent on a product that genuinely lacks it. Naming a combination that no single source returns together is refused as invalid input, with no charge."""
47
65
  url: Required[str]
48
66
  """Full Amazon product URL (e.g. https://www.amazon.com/dp/B0CX23V2ZK)."""
49
67
 
@@ -90,6 +108,20 @@ class AmazonReviewsInput(TypedDict, total=False):
90
108
  ]
91
109
  ]
92
110
  """Amazon marketplace domain the product ASIN belongs to (e.g. amazon.co.uk)."""
111
+ requireFields: NotRequired[
112
+ list[
113
+ Literal[
114
+ "createdUtc",
115
+ "helpfulVotes",
116
+ "rating",
117
+ "reviewer",
118
+ "title",
119
+ "url",
120
+ "verifiedPurchase",
121
+ ]
122
+ ]
123
+ ]
124
+ """Optional; omit it and routing is unchanged, with the cheapest source serving. Name the output fields this request must be able to return, for example `url`, and it is served only by a source that returns every one of them. Fields you do not name are still returned whenever the serving source has them. This can raise your price: when the cheapest source cannot return a named field, a dearer source serves, and you are quoted and charged its price. A named field can still be absent on a review that genuinely lacks it. Naming a combination that no single source returns together is refused as invalid input, with no charge."""
93
125
  sort: NotRequired[Literal["helpful", "recent"]]
94
126
  """Review sort order: most helpful first or most recent first (e.g. recent)."""
95
127
  startDate: NotRequired[str]
@@ -3,7 +3,7 @@
3
3
 
4
4
  from __future__ import annotations
5
5
 
6
- from typing import TYPE_CHECKING
6
+ from typing import Literal, TYPE_CHECKING
7
7
 
8
8
  from pydantic import BaseModel, ConfigDict, Field
9
9
  from typing_extensions import NotRequired, Required, TypedDict, Unpack
@@ -26,6 +26,8 @@ class AppstoreReviewsInput(TypedDict, total=False):
26
26
  """Maximum number of results to return (1-100, default 100). You are billed per result returned, so a lower limit costs less. Range: 1 to 100."""
27
27
  preferLatencyUnderMs: NotRequired[int]
28
28
  """Optional; omit it and routing is unchanged, with the cheapest source serving. Prefer sources whose typical response time (median over the trailing 30 days, as published on this endpoint's lane health) is under this many milliseconds; among those, the cheapest serves. This can raise your price: when the cheapest source misses the target, a faster and dearer one serves, and you are quoted and charged its price. If no source is that fast the request is still served, by whichever source offers the best speed for its price - it is never refused for being slow. Sources we have not timed are tried last. This is a preference, not a guarantee: the median describes past requests and is not a ceiling on this one, and it excludes any wait this request itself asks for. On a paginated walk it applies to the first page only: later pages stay with the source that page chose, at the price it was quoted. Minimum: 1."""
29
+ requireFields: NotRequired[list[Literal["helpfulVotes", "title", "url", "version"]]]
30
+ """Optional; omit it and routing is unchanged, with the cheapest source serving. Name the output fields this request must be able to return, for example `helpfulVotes` or `version`, and it is served only by a source that returns every one of them. Fields you do not name are still returned whenever the serving source has them. This can raise your price: when the cheapest source cannot return a named field, a dearer source serves, and you are quoted and charged its price. A named field can still be absent on a review that genuinely lacks it. Naming a combination that no single source returns together is refused as invalid input, with no charge."""
29
31
 
30
32
 
31
33
  class AppstoreReviewsData(BaseModel):
@@ -24,6 +24,20 @@ class CapterraReviewsInput(TypedDict, total=False):
24
24
  """Optional; omit it and routing is unchanged, with the cheapest source serving. Prefer sources whose typical response time (median over the trailing 30 days, as published on this endpoint's lane health) is under this many milliseconds; among those, the cheapest serves. This can raise your price: when the cheapest source misses the target, a faster and dearer one serves, and you are quoted and charged its price. If no source is that fast the request is still served, by whichever source offers the best speed for its price - it is never refused for being slow. Sources we have not timed are tried last. This is a preference, not a guarantee: the median describes past requests and is not a ceiling on this one, and it excludes any wait this request itself asks for. On a paginated walk it applies to the first page only: later pages stay with the source that page chose, at the price it was quoted. Minimum: 1."""
25
25
  product: Required[str]
26
26
  """Capterra product URL, for example https://www.capterra.com/p/135003/Slack/. Capterra identifies a product by both its numeric id and its slug, so the full URL is required."""
27
+ requireFields: NotRequired[
28
+ list[
29
+ Literal[
30
+ "alternativesConsidered",
31
+ "anonymous",
32
+ "chosenReasons",
33
+ "ownerResponse",
34
+ "reviewSource",
35
+ "switchedFrom",
36
+ "switchingReasons",
37
+ ]
38
+ ]
39
+ ]
40
+ """Optional; omit it and routing is unchanged, with the cheapest source serving. Name the output fields this request must be able to return, for example `ownerResponse`, and it is served only by a source that returns every one of them. Fields you do not name are still returned whenever the serving source has them. This can raise your price: when the cheapest source cannot return a named field, a dearer source serves, and you are quoted and charged its price. A named field can still be absent on a review that genuinely lacks it. Naming a combination that no single source returns together is refused as invalid input, with no charge."""
27
41
  sortBy: NotRequired[Literal["recent", "complete", "highest", "lowest"]]
28
42
  """Sort order for the returned reviews: newest first, most complete first, or highest or lowest rated first. Default: recent."""
29
43
 
@@ -28,6 +28,44 @@ class ChatgptSearchInput(TypedDict, total=False):
28
28
  """Serve only from a source that can return sponsored placements shown with the answer. One source currently qualifies, so the request cannot fall back when it is unavailable. Default: false."""
29
29
  requireEntities: NotRequired[bool]
30
30
  """Serve only from a source that can return brands and other named entities recognized in the answer. One source currently qualifies, so the request cannot fall back when it is unavailable. Default: false."""
31
+ requireFields: NotRequired[
32
+ list[
33
+ Literal[
34
+ "address",
35
+ "ads",
36
+ "advertiserName",
37
+ "advertiserUrl",
38
+ "answerPosition",
39
+ "category",
40
+ "cited",
41
+ "createdUtc",
42
+ "currency",
43
+ "description",
44
+ "domain",
45
+ "entities",
46
+ "image",
47
+ "merchants",
48
+ "model",
49
+ "name",
50
+ "phone",
51
+ "places",
52
+ "position",
53
+ "price",
54
+ "prompt",
55
+ "rating",
56
+ "reviewCount",
57
+ "searchQueries",
58
+ "searchResults",
59
+ "shoppingCards",
60
+ "snippet",
61
+ "title",
62
+ "url",
63
+ "webSearchTriggered",
64
+ "websiteUrl",
65
+ ]
66
+ ]
67
+ ]
68
+ """Optional; omit it and routing is unchanged, with the cheapest source serving. Name the output fields this request must be able to return, for example `cited` or `price`, and it is served only by a source that returns every one of them. Fields you do not name are still returned whenever the serving source has them. This can raise your price: when the cheapest source cannot return a named field, a dearer source serves, and you are quoted and charged its price. A named field can still be absent on a result that genuinely lacks it. Naming a combination that no single source returns together is refused as invalid input, with no charge."""
31
69
  requirePlaces: NotRequired[bool]
32
70
  """Serve only from a source that can return places shown with the answer. Leaving this off still returns places whenever the source that answered can. Turning it on selects the single source that guarantees them, which costs more and has nothing to fall back to if it is unavailable. Default: false."""
33
71
  requireShoppingCards: NotRequired[bool]
@@ -3,7 +3,7 @@
3
3
 
4
4
  from __future__ import annotations
5
5
 
6
- from typing import Any, TYPE_CHECKING
6
+ from typing import Any, Literal, TYPE_CHECKING
7
7
 
8
8
  from pydantic import BaseModel, ConfigDict, Field
9
9
  from typing_extensions import NotRequired, Required, TypedDict, Unpack
@@ -31,6 +31,14 @@ class EmailVerifyInput(TypedDict, total=False):
31
31
  """The email address to verify (e.g. jane.doe@acme.com). Exactly one @, a dotted domain, no whitespace or angle brackets. Addresses on reserved, never-deliverable TLDs (.invalid, .test, .example, .localhost, .local, .internal, .blink) and HTML/JSON escape artifacts (a u003e prefix) are rejected locally with no charge."""
32
32
  preferLatencyUnderMs: NotRequired[int]
33
33
  """Optional; omit it and routing is unchanged, with the cheapest source serving. Prefer sources whose typical response time (median over the trailing 30 days, as published on this endpoint's lane health) is under this many milliseconds; among those, the cheapest serves. This can raise your price: when the cheapest source misses the target, a faster and dearer one serves, and you are quoted and charged its price. If no source is that fast the request is still served, by whichever source offers the best speed for its price - it is never refused for being slow. Sources we have not timed are tried last. This is a preference, not a guarantee: the median describes past requests and is not a ceiling on this one, and it excludes any wait this request itself asks for. On a paginated walk it applies to the first page only: later pages stay with the source that page chose, at the price it was quoted. Minimum: 1."""
34
+ requireFields: NotRequired[
35
+ list[
36
+ Literal[
37
+ "catchAll", "disposable", "domain", "free", "reason", "role", "score"
38
+ ]
39
+ ]
40
+ ]
41
+ """Optional; omit it and routing is unchanged, with the cheapest source serving. Name the output fields this request must be able to return, for example `reason`, and it is served only by a source that returns every one of them. Fields you do not name are still returned whenever the serving source has them. This can raise your price: when the cheapest source cannot return a named field, a dearer source serves, and you are quoted and charged its price. A named field can still be absent on a result that genuinely lacks it. Naming a combination that no single source returns together is refused as invalid input, with no charge."""
34
42
 
35
43
 
36
44
  class EmailFindData(BaseModel):
@@ -24,6 +24,20 @@ class G2ReviewsInput(TypedDict, total=False):
24
24
  """Optional; omit it and routing is unchanged, with the cheapest source serving. Prefer sources whose typical response time (median over the trailing 30 days, as published on this endpoint's lane health) is under this many milliseconds; among those, the cheapest serves. This can raise your price: when the cheapest source misses the target, a faster and dearer one serves, and you are quoted and charged its price. If no source is that fast the request is still served, by whichever source offers the best speed for its price - it is never refused for being slow. Sources we have not timed are tried last. This is a preference, not a guarantee: the median describes past requests and is not a ceiling on this one, and it excludes any wait this request itself asks for. On a paginated walk it applies to the first page only: later pages stay with the source that page chose, at the price it was quoted. Minimum: 1."""
25
25
  product: Required[str]
26
26
  """G2 product slug, for example hubspot-marketing-hub. A full G2 product URL is also accepted and reduced to its slug."""
27
+ requireFields: NotRequired[
28
+ list[
29
+ Literal[
30
+ "authorCountry",
31
+ "helpfulVotes",
32
+ "productSlug",
33
+ "ratings",
34
+ "responseType",
35
+ "reviewSource",
36
+ "switchedFrom",
37
+ ]
38
+ ]
39
+ ]
40
+ """Optional; omit it and routing is unchanged, with the cheapest source serving. Name the output fields this request must be able to return, for example `productSlug`, and it is served only by a source that returns every one of them. Fields you do not name are still returned whenever the serving source has them. This can raise your price: when the cheapest source cannot return a named field, a dearer source serves, and you are quoted and charged its price. A named field can still be absent on a review that genuinely lacks it. Naming a combination that no single source returns together is refused as invalid input, with no charge."""
27
41
  sortBy: NotRequired[Literal["recent", "helpful", "highest", "lowest", "default"]]
28
42
  """Sort order for the returned reviews: newest first, most helpful first, highest or lowest rated first, or G2's own default ordering. Default: recent."""
29
43
 
@@ -3,7 +3,7 @@
3
3
 
4
4
  from __future__ import annotations
5
5
 
6
- from typing import TYPE_CHECKING
6
+ from typing import Literal, TYPE_CHECKING
7
7
 
8
8
  from pydantic import BaseModel, ConfigDict, Field
9
9
  from typing_extensions import NotRequired, Required, TypedDict, Unpack
@@ -37,6 +37,10 @@ class GoogleAiOverviewInput(TypedDict, total=False):
37
37
  """Optional; omit it and routing is unchanged, with the cheapest source serving. Prefer sources whose typical response time (median over the trailing 30 days, as published on this endpoint's lane health) is under this many milliseconds; among those, the cheapest serves. This can raise your price: when the cheapest source misses the target, a faster and dearer one serves, and you are quoted and charged its price. If no source is that fast the request is still served, by whichever source offers the best speed for its price - it is never refused for being slow. Sources we have not timed are tried last. This is a preference, not a guarantee: the median describes past requests and is not a ceiling on this one, and it excludes any wait this request itself asks for. On a paginated walk it applies to the first page only: later pages stay with the source that page chose, at the price it was quoted. Minimum: 1."""
38
38
  prompt: Required[str]
39
39
  """The question or prompt to answer with a Google AI Overview."""
40
+ requireFields: NotRequired[
41
+ list[Literal["citations", "index", "scrapedAt", "title", "url"]]
42
+ ]
43
+ """Optional; omit it and routing is unchanged, with the cheapest source serving. Name the output fields this request must be able to return, for example `citations` or `index`, and it is served only by a source that returns every one of them. Fields you do not name are still returned whenever the serving source has them. This can raise your price: when the cheapest source cannot return a named field, a dearer source serves, and you are quoted and charged its price. A named field can still be absent on a result that genuinely lacks it. Naming a combination that no single source returns together is refused as invalid input, with no charge."""
40
44
 
41
45
 
42
46
  class GoogleAutocompleteInput(TypedDict, total=False):
@@ -139,7 +143,7 @@ class GoogleSearchInput(TypedDict, total=False):
139
143
  query: Required[str]
140
144
  """The Google search query."""
141
145
  requireCursor: NotRequired[bool]
142
- """Set true if you intend to page through results. Every source for this search returns a nextCursor, so this changes nothing about the price or which source serves you; it stays supported so callers that already send it keep working."""
146
+ """Deprecated. Every source for this search returns a nextCursor, so this changes nothing about the price or which source serves you; it stays accepted so callers that already send it keep working."""
143
147
  timeframe: NotRequired[str]
144
148
  """Restrict results to a recent time window: 1h, 1d, 7d, 1y, or all. Default all (no time restriction)."""
145
149
 
@@ -538,7 +542,7 @@ class GoogleNamespace:
538
542
  Mode composes the answer at search time, so repeat calls on one prompt can
539
543
  differ in wording and in which sources are cited.
540
544
 
541
- Price: $0.0007 per request.
545
+ Price: $0.00006 per request plus $0.0033 per result (maximum $0.00336).
542
546
 
543
547
  Example:
544
548
  res = client.google.ai_mode(prompt="What is AnyAPI at getanyapi.com, and what does it offer?")
@@ -705,7 +709,7 @@ class GoogleNamespace:
705
709
  as cursor to walk further, or use google.search_100 for up to 100 ranked
706
710
  results in one call, which is cheaper past roughly 20 results.
707
711
 
708
- Price: $0.0009 per request.
712
+ Price: $0.0005 per request.
709
713
 
710
714
  Example:
711
715
  res = client.google.search(gl="us", hl="en", limit=10, query="best coffee maker")
@@ -803,7 +807,7 @@ class AsyncGoogleNamespace:
803
807
  Mode composes the answer at search time, so repeat calls on one prompt can
804
808
  differ in wording and in which sources are cited.
805
809
 
806
- Price: $0.0007 per request.
810
+ Price: $0.00006 per request plus $0.0033 per result (maximum $0.00336).
807
811
 
808
812
  Example:
809
813
  res = client.google.ai_mode(prompt="What is AnyAPI at getanyapi.com, and what does it offer?")
@@ -970,7 +974,7 @@ class AsyncGoogleNamespace:
970
974
  as cursor to walk further, or use google.search_100 for up to 100 ranked
971
975
  results in one call, which is cheaper past roughly 20 results.
972
976
 
973
- Price: $0.0009 per request.
977
+ Price: $0.0005 per request.
974
978
 
975
979
  Example:
976
980
  res = client.google.search(gl="us", hl="en", limit=10, query="best coffee maker")
@@ -30,6 +30,24 @@ class GoogleShoppingSearchInput(TypedDict, total=False):
30
30
  """Optional; omit it and routing is unchanged, with the cheapest source serving. Prefer sources whose typical response time (median over the trailing 30 days, as published on this endpoint's lane health) is under this many milliseconds; among those, the cheapest serves. This can raise your price: when the cheapest source misses the target, a faster and dearer one serves, and you are quoted and charged its price. If no source is that fast the request is still served, by whichever source offers the best speed for its price - it is never refused for being slow. Sources we have not timed are tried last. This is a preference, not a guarantee: the median describes past requests and is not a ceiling on this one, and it excludes any wait this request itself asks for. On a paginated walk it applies to the first page only: later pages stay with the source that page chose, at the price it was quoted. Minimum: 1."""
31
31
  query: Required[str]
32
32
  """Product name, brand, or keywords to search for (e.g. "Nike running shoes")."""
33
+ requireFields: NotRequired[
34
+ list[
35
+ Literal[
36
+ "brand",
37
+ "currency",
38
+ "discountPercent",
39
+ "listPrice",
40
+ "listPriceText",
41
+ "price",
42
+ "priceText",
43
+ "productId",
44
+ "rating",
45
+ "reviewsCount",
46
+ "seller",
47
+ ]
48
+ ]
49
+ ]
50
+ """Optional; omit it and routing is unchanged, with the cheapest source serving. Name the output fields this request must be able to return, for example `listPrice` or `discountPercent`, and it is served only by a source that returns every one of them. Fields you do not name are still returned whenever the serving source has them. This can raise your price: when the cheapest source cannot return a named field, a dearer source serves, and you are quoted and charged its price. A named field can still be absent on a product that genuinely lacks it. Naming a combination that no single source returns together is refused as invalid input, with no charge."""
33
51
  sortBy: NotRequired[
34
52
  Literal["BEST_MATCH", "LOWEST_PRICE", "HIGHEST_PRICE", "TOP_RATED"]
35
53
  ]
@@ -70,6 +70,10 @@ class InstagramFollowersInput(TypedDict, total=False):
70
70
  """Opaque pagination cursor from a previous response's nextCursor. Omit for the first page; pass it to fetch the next page of followers. A page holds up to 50 followers."""
71
71
  preferLatencyUnderMs: NotRequired[int]
72
72
  """Optional; omit it and routing is unchanged, with the cheapest source serving. Prefer sources whose typical response time (median over the trailing 30 days, as published on this endpoint's lane health) is under this many milliseconds; among those, the cheapest serves. This can raise your price: when the cheapest source misses the target, a faster and dearer one serves, and you are quoted and charged its price. If no source is that fast the request is still served, by whichever source offers the best speed for its price - it is never refused for being slow. Sources we have not timed are tried last. This is a preference, not a guarantee: the median describes past requests and is not a ceiling on this one, and it excludes any wait this request itself asks for. On a paginated walk it applies to the first page only: later pages stay with the source that page chose, at the price it was quoted. Minimum: 1."""
73
+ requireFields: NotRequired[
74
+ list[Literal["image", "name", "nextCursor", "private", "url", "verified"]]
75
+ ]
76
+ """Optional; omit it and routing is unchanged, with the cheapest source serving. Name the output fields this request must be able to return, for example `private`, and it is served only by a source that returns every one of them. Fields you do not name are still returned whenever the serving source has them. This can raise your price: when the cheapest source cannot return a named field, a dearer source serves, and you are quoted and charged its price. A named field can still be absent on a profile that genuinely lacks it. Naming a combination that no single source returns together is refused as invalid input, with no charge. On a paginated walk it applies to the first page only; later pages stay with the source that page chose, at the price it was quoted."""
73
77
  username: Required[str]
74
78
  """The Instagram username, user ID, or profile URL whose followers to list (e.g. natgeo)."""
75
79
 
@@ -81,6 +85,10 @@ class InstagramFollowingInput(TypedDict, total=False):
81
85
  """Opaque pagination cursor from a previous response's nextCursor. Omit for the first page; pass it to fetch the next page. A page holds up to 50 accounts."""
82
86
  preferLatencyUnderMs: NotRequired[int]
83
87
  """Optional; omit it and routing is unchanged, with the cheapest source serving. Prefer sources whose typical response time (median over the trailing 30 days, as published on this endpoint's lane health) is under this many milliseconds; among those, the cheapest serves. This can raise your price: when the cheapest source misses the target, a faster and dearer one serves, and you are quoted and charged its price. If no source is that fast the request is still served, by whichever source offers the best speed for its price - it is never refused for being slow. Sources we have not timed are tried last. This is a preference, not a guarantee: the median describes past requests and is not a ceiling on this one, and it excludes any wait this request itself asks for. On a paginated walk it applies to the first page only: later pages stay with the source that page chose, at the price it was quoted. Minimum: 1."""
88
+ requireFields: NotRequired[
89
+ list[Literal["image", "name", "nextCursor", "private", "url", "verified"]]
90
+ ]
91
+ """Optional; omit it and routing is unchanged, with the cheapest source serving. Name the output fields this request must be able to return, for example `private`, and it is served only by a source that returns every one of them. Fields you do not name are still returned whenever the serving source has them. This can raise your price: when the cheapest source cannot return a named field, a dearer source serves, and you are quoted and charged its price. A named field can still be absent on a profile that genuinely lacks it. Naming a combination that no single source returns together is refused as invalid input, with no charge. On a paginated walk it applies to the first page only; later pages stay with the source that page chose, at the price it was quoted."""
84
92
  username: Required[str]
85
93
  """The Instagram username, user ID, or profile URL whose following list to fetch (e.g. natgeo)."""
86
94
 
@@ -154,8 +162,12 @@ class InstagramPostInput(TypedDict, total=False):
154
162
 
155
163
  preferLatencyUnderMs: NotRequired[int]
156
164
  """Optional; omit it and routing is unchanged, with the cheapest source serving. Prefer sources whose typical response time (median over the trailing 30 days, as published on this endpoint's lane health) is under this many milliseconds; among those, the cheapest serves. This can raise your price: when the cheapest source misses the target, a faster and dearer one serves, and you are quoted and charged its price. If no source is that fast the request is still served, by whichever source offers the best speed for its price - it is never refused for being slow. Sources we have not timed are tried last. This is a preference, not a guarantee: the median describes past requests and is not a ceiling on this one, and it excludes any wait this request itself asks for. On a paginated walk it applies to the first page only: later pages stay with the source that page chose, at the price it was quoted. Minimum: 1."""
165
+ requireFields: NotRequired[
166
+ list[Literal["likes", "plays", "shortcode", "type", "videoUrl"]]
167
+ ]
168
+ """Optional; omit it and routing is unchanged, with the cheapest source serving. Name the output fields this request must be able to return, for example `plays`, and it is served only by a source that returns every one of them. Fields you do not name are still returned whenever the serving source has them. This can raise your price: when the cheapest source cannot return a named field, a dearer source serves, and you are quoted and charged its price. A named field can still be absent on a post that genuinely lacks it. Naming a combination that no single source returns together is refused as invalid input, with no charge."""
157
169
  requirePlayCount: NotRequired[bool]
158
- """Set true to be served only by a source that reports a reel's play count. The default cheapest source does not carry play counts, so `plays` is absent from its responses; opting in guarantees the field when Instagram exposes it, at a higher price per request."""
170
+ """Deprecated; send `requireFields: ["plays"]` instead, which does exactly the same thing. Set true to be served only by a source that reports a reel's play count. Omit it and routing is unchanged, with the cheapest source serving, which does not carry play counts, so `plays` is absent from its responses. This can raise your price: opting in routes to a source that reports the count, and you are quoted and charged its price. It stays accepted so callers that already send it keep working."""
159
171
  url: Required[str]
160
172
  """Full Instagram post or reel URL, carrying the media shortcode: /p/, /reel/, /reels/, or /tv/. A profile URL such as https://www.instagram.com/username names no post, so it is rejected instead of charged for an empty result."""
161
173
 
@@ -250,6 +262,24 @@ class InstagramSearchHashtagInput(TypedDict, total=False):
250
262
  """Filter by media type. One of all, reel."""
251
263
  preferLatencyUnderMs: NotRequired[int]
252
264
  """Optional; omit it and routing is unchanged, with the cheapest source serving. Prefer sources whose typical response time (median over the trailing 30 days, as published on this endpoint's lane health) is under this many milliseconds; among those, the cheapest serves. This can raise your price: when the cheapest source misses the target, a faster and dearer one serves, and you are quoted and charged its price. If no source is that fast the request is still served, by whichever source offers the best speed for its price - it is never refused for being slow. Sources we have not timed are tried last. This is a preference, not a guarantee: the median describes past requests and is not a ceiling on this one, and it excludes any wait this request itself asks for. On a paginated walk it applies to the first page only: later pages stay with the source that page chose, at the price it was quoted. Minimum: 1."""
265
+ requireFields: NotRequired[
266
+ list[
267
+ Literal[
268
+ "avatarUrl",
269
+ "caption",
270
+ "comments",
271
+ "createdUtc",
272
+ "durationSeconds",
273
+ "isAd",
274
+ "likes",
275
+ "nextCursor",
276
+ "type",
277
+ "verified",
278
+ "videoUrl",
279
+ ]
280
+ ]
281
+ ]
282
+ """Optional; omit it and routing is unchanged, with the cheapest source serving. Name the output fields this request must be able to return, for example `isAd`, and it is served only by a source that returns every one of them. Fields you do not name are still returned whenever the serving source has them. This can raise your price: when the cheapest source cannot return a named field, a dearer source serves, and you are quoted and charged its price. A named field can still be absent on a post that genuinely lacks it. Naming a combination that no single source returns together is refused as invalid input, with no charge. On a paginated walk it applies to the first page only; later pages stay with the source that page chose, at the price it was quoted."""
253
283
 
254
284
 
255
285
  class InstagramSearchLocationsInput(TypedDict, total=False):
@@ -2479,7 +2509,7 @@ class InstagramNamespace:
2479
2509
  Fetch an Instagram account's public profile (followers, posts, bio,
2480
2510
  verification) by handle.
2481
2511
 
2482
- Price: $0.0012 per request.
2512
+ Price: $0.0005 per request.
2483
2513
 
2484
2514
  Example:
2485
2515
  res = client.instagram.profile(handle="nasa")
@@ -3497,7 +3527,7 @@ class AsyncInstagramNamespace:
3497
3527
  Fetch an Instagram account's public profile (followers, posts, bio,
3498
3528
  verification) by handle.
3499
3529
 
3500
- Price: $0.0012 per request.
3530
+ Price: $0.0005 per request.
3501
3531
 
3502
3532
  Example:
3503
3533
  res = client.instagram.profile(handle="nasa")