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.
- {getanyapi-0.40.2 → getanyapi-0.42.0}/PKG-INFO +1 -1
- {getanyapi-0.40.2 → getanyapi-0.42.0}/pyproject.toml +1 -1
- {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/__init__.py +1 -1
- {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/amazon.py +32 -0
- {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/appstore.py +3 -1
- {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/capterra.py +14 -0
- {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/chatgpt.py +38 -0
- {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/email.py +9 -1
- {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/g2.py +14 -0
- {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/google.py +10 -6
- {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/google_shopping.py +18 -0
- {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/instagram.py +33 -3
- {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/linkedin.py +637 -1
- {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/maps.py +64 -0
- {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/playstore.py +2 -0
- {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/reddit.py +140 -18
- getanyapi-0.42.0/src/getanyapi/platforms/substack.py +399 -0
- {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/tiktok.py +41 -6
- {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/tripadvisor.py +25 -0
- {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/trustpilot.py +3 -1
- {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/twitter.py +89 -11
- {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/walmart.py +19 -1
- {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/yelp.py +29 -1
- {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/youtube.py +5 -3
- getanyapi-0.40.2/src/getanyapi/platforms/substack.py +0 -168
- {getanyapi-0.40.2 → getanyapi-0.42.0}/.gitignore +0 -0
- {getanyapi-0.40.2 → getanyapi-0.42.0}/README.md +0 -0
- {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/_account.py +0 -0
- {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/_async_client.py +0 -0
- {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/_client.py +0 -0
- {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/_errors.py +0 -0
- {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/_idempotency.py +0 -0
- {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/_pagination.py +0 -0
- {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/_transport.py +0 -0
- {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/discovery_types.py +0 -0
- {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/__init__.py +0 -0
- {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/ahrefs.py +0 -0
- {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/airbnb.py +0 -0
- {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/alibaba.py +0 -0
- {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/apollo.py +0 -0
- {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/bluesky.py +0 -0
- {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/booking.py +0 -0
- {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/coinmarketcap.py +0 -0
- {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/company.py +0 -0
- {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/company_enrichment.py +0 -0
- {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/company_search.py +0 -0
- {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/congress.py +0 -0
- {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/dexscreener.py +0 -0
- {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/douyin.py +0 -0
- {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/ebay.py +0 -0
- {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/email_finding.py +0 -0
- {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/email_verification.py +0 -0
- {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/facebook.py +0 -0
- {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/fiverr.py +0 -0
- {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/gemini.py +0 -0
- {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/github.py +0 -0
- {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/glassdoor.py +0 -0
- {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/google_ads.py +0 -0
- {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/google_finance.py +0 -0
- {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/hackernews.py +0 -0
- {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/indeed.py +0 -0
- {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/job_search.py +0 -0
- {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/mobile_phone.py +0 -0
- {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/naver.py +0 -0
- {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/nextdoor.py +0 -0
- {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/people_search.py +0 -0
- {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/perplexity.py +0 -0
- {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/person.py +0 -0
- {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/person_enrichment.py +0 -0
- {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/pinterest.py +0 -0
- {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/polymarket.py +0 -0
- {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/realtor.py +0 -0
- {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/redfin.py +0 -0
- {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/rednote.py +0 -0
- {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/sec.py +0 -0
- {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/semrush.py +0 -0
- {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/seo.py +0 -0
- {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/snapchat.py +0 -0
- {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/social.py +0 -0
- {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/spotify.py +0 -0
- {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/technographics.py +0 -0
- {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/threads.py +0 -0
- {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/tiktok_shop.py +0 -0
- {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/truthsocial.py +0 -0
- {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/upwork.py +0 -0
- {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/web.py +0 -0
- {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/weibo.py +0 -0
- {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/yahoo_finance.py +0 -0
- {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/zhihu.py +0 -0
- {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/platforms/zillow.py +0 -0
- {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/py.typed +0 -0
- {getanyapi-0.40.2 → getanyapi-0.42.0}/src/getanyapi/types.py +0 -0
- {getanyapi-0.40.2 → getanyapi-0.42.0}/tests/conftest.py +0 -0
- {getanyapi-0.40.2 → getanyapi-0.42.0}/tests/test_account.py +0 -0
- {getanyapi-0.40.2 → getanyapi-0.42.0}/tests/test_client.py +0 -0
- {getanyapi-0.40.2 → getanyapi-0.42.0}/tests/test_durable_requests.py +0 -0
- {getanyapi-0.40.2 → getanyapi-0.42.0}/tests/test_envelope.py +0 -0
- {getanyapi-0.40.2 → getanyapi-0.42.0}/tests/test_errors.py +0 -0
- {getanyapi-0.40.2 → getanyapi-0.42.0}/tests/test_fixture_roundtrip.py +0 -0
- {getanyapi-0.40.2 → getanyapi-0.42.0}/tests/test_fixture_sweep.py +0 -0
- {getanyapi-0.40.2 → getanyapi-0.42.0}/tests/test_pagination.py +0 -0
- {getanyapi-0.40.2 → getanyapi-0.42.0}/tests/test_transport.py +0 -0
- {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.
|
|
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
|
|
@@ -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
|
-
"""
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
3530
|
+
Price: $0.0005 per request.
|
|
3501
3531
|
|
|
3502
3532
|
Example:
|
|
3503
3533
|
res = client.instagram.profile(handle="nasa")
|