getanyapi 0.92.0__tar.gz → 0.93.1__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 (109) hide show
  1. {getanyapi-0.92.0 → getanyapi-0.93.1}/PKG-INFO +1 -1
  2. {getanyapi-0.92.0 → getanyapi-0.93.1}/pyproject.toml +1 -1
  3. {getanyapi-0.92.0 → getanyapi-0.93.1}/src/getanyapi/__init__.py +1 -1
  4. {getanyapi-0.92.0 → getanyapi-0.93.1}/src/getanyapi/platforms/google.py +1 -1
  5. {getanyapi-0.92.0 → getanyapi-0.93.1}/src/getanyapi/platforms/linkedin.py +114 -4
  6. {getanyapi-0.92.0 → getanyapi-0.93.1}/src/getanyapi/platforms/maps.py +1 -1
  7. {getanyapi-0.92.0 → getanyapi-0.93.1}/src/getanyapi/platforms/pinterest.py +1 -1
  8. {getanyapi-0.92.0 → getanyapi-0.93.1}/src/getanyapi/platforms/reddit.py +2 -2
  9. {getanyapi-0.92.0 → getanyapi-0.93.1}/src/getanyapi/platforms/twitter.py +6 -6
  10. {getanyapi-0.92.0 → getanyapi-0.93.1}/.gitignore +0 -0
  11. {getanyapi-0.92.0 → getanyapi-0.93.1}/README.md +0 -0
  12. {getanyapi-0.92.0 → getanyapi-0.93.1}/src/getanyapi/_account.py +0 -0
  13. {getanyapi-0.92.0 → getanyapi-0.93.1}/src/getanyapi/_async_client.py +0 -0
  14. {getanyapi-0.92.0 → getanyapi-0.93.1}/src/getanyapi/_client.py +0 -0
  15. {getanyapi-0.92.0 → getanyapi-0.93.1}/src/getanyapi/_errors.py +0 -0
  16. {getanyapi-0.92.0 → getanyapi-0.93.1}/src/getanyapi/_idempotency.py +0 -0
  17. {getanyapi-0.92.0 → getanyapi-0.93.1}/src/getanyapi/_pagination.py +0 -0
  18. {getanyapi-0.92.0 → getanyapi-0.93.1}/src/getanyapi/_transport.py +0 -0
  19. {getanyapi-0.92.0 → getanyapi-0.93.1}/src/getanyapi/discovery_types.py +0 -0
  20. {getanyapi-0.92.0 → getanyapi-0.93.1}/src/getanyapi/platforms/__init__.py +0 -0
  21. {getanyapi-0.92.0 → getanyapi-0.93.1}/src/getanyapi/platforms/ahrefs.py +0 -0
  22. {getanyapi-0.92.0 → getanyapi-0.93.1}/src/getanyapi/platforms/airbnb.py +0 -0
  23. {getanyapi-0.92.0 → getanyapi-0.93.1}/src/getanyapi/platforms/alibaba.py +0 -0
  24. {getanyapi-0.92.0 → getanyapi-0.93.1}/src/getanyapi/platforms/amazon.py +0 -0
  25. {getanyapi-0.92.0 → getanyapi-0.93.1}/src/getanyapi/platforms/apollo.py +0 -0
  26. {getanyapi-0.92.0 → getanyapi-0.93.1}/src/getanyapi/platforms/appstore.py +0 -0
  27. {getanyapi-0.92.0 → getanyapi-0.93.1}/src/getanyapi/platforms/bluesky.py +0 -0
  28. {getanyapi-0.92.0 → getanyapi-0.93.1}/src/getanyapi/platforms/booking.py +0 -0
  29. {getanyapi-0.92.0 → getanyapi-0.93.1}/src/getanyapi/platforms/capterra.py +0 -0
  30. {getanyapi-0.92.0 → getanyapi-0.93.1}/src/getanyapi/platforms/chatgpt.py +0 -0
  31. {getanyapi-0.92.0 → getanyapi-0.93.1}/src/getanyapi/platforms/coinmarketcap.py +0 -0
  32. {getanyapi-0.92.0 → getanyapi-0.93.1}/src/getanyapi/platforms/company.py +0 -0
  33. {getanyapi-0.92.0 → getanyapi-0.93.1}/src/getanyapi/platforms/company_enrichment.py +0 -0
  34. {getanyapi-0.92.0 → getanyapi-0.93.1}/src/getanyapi/platforms/company_identify.py +0 -0
  35. {getanyapi-0.92.0 → getanyapi-0.93.1}/src/getanyapi/platforms/company_search.py +0 -0
  36. {getanyapi-0.92.0 → getanyapi-0.93.1}/src/getanyapi/platforms/congress.py +0 -0
  37. {getanyapi-0.92.0 → getanyapi-0.93.1}/src/getanyapi/platforms/contact_enrichment.py +0 -0
  38. {getanyapi-0.92.0 → getanyapi-0.93.1}/src/getanyapi/platforms/douyin.py +0 -0
  39. {getanyapi-0.92.0 → getanyapi-0.93.1}/src/getanyapi/platforms/ebay.py +0 -0
  40. {getanyapi-0.92.0 → getanyapi-0.93.1}/src/getanyapi/platforms/email.py +0 -0
  41. {getanyapi-0.92.0 → getanyapi-0.93.1}/src/getanyapi/platforms/email_finding.py +0 -0
  42. {getanyapi-0.92.0 → getanyapi-0.93.1}/src/getanyapi/platforms/email_verification.py +0 -0
  43. {getanyapi-0.92.0 → getanyapi-0.93.1}/src/getanyapi/platforms/facebook.py +0 -0
  44. {getanyapi-0.92.0 → getanyapi-0.93.1}/src/getanyapi/platforms/fiverr.py +0 -0
  45. {getanyapi-0.92.0 → getanyapi-0.93.1}/src/getanyapi/platforms/g2.py +0 -0
  46. {getanyapi-0.92.0 → getanyapi-0.93.1}/src/getanyapi/platforms/gemini.py +0 -0
  47. {getanyapi-0.92.0 → getanyapi-0.93.1}/src/getanyapi/platforms/github.py +0 -0
  48. {getanyapi-0.92.0 → getanyapi-0.93.1}/src/getanyapi/platforms/glassdoor.py +0 -0
  49. {getanyapi-0.92.0 → getanyapi-0.93.1}/src/getanyapi/platforms/google_ads.py +0 -0
  50. {getanyapi-0.92.0 → getanyapi-0.93.1}/src/getanyapi/platforms/google_finance.py +0 -0
  51. {getanyapi-0.92.0 → getanyapi-0.93.1}/src/getanyapi/platforms/google_hotels.py +0 -0
  52. {getanyapi-0.92.0 → getanyapi-0.93.1}/src/getanyapi/platforms/google_shopping.py +0 -0
  53. {getanyapi-0.92.0 → getanyapi-0.93.1}/src/getanyapi/platforms/hackernews.py +0 -0
  54. {getanyapi-0.92.0 → getanyapi-0.93.1}/src/getanyapi/platforms/indeed.py +0 -0
  55. {getanyapi-0.92.0 → getanyapi-0.93.1}/src/getanyapi/platforms/instagram.py +0 -0
  56. {getanyapi-0.92.0 → getanyapi-0.93.1}/src/getanyapi/platforms/job_search.py +0 -0
  57. {getanyapi-0.92.0 → getanyapi-0.93.1}/src/getanyapi/platforms/mobile_phone.py +0 -0
  58. {getanyapi-0.92.0 → getanyapi-0.93.1}/src/getanyapi/platforms/naver.py +0 -0
  59. {getanyapi-0.92.0 → getanyapi-0.93.1}/src/getanyapi/platforms/nextdoor.py +0 -0
  60. {getanyapi-0.92.0 → getanyapi-0.93.1}/src/getanyapi/platforms/people_search.py +0 -0
  61. {getanyapi-0.92.0 → getanyapi-0.93.1}/src/getanyapi/platforms/perplexity.py +0 -0
  62. {getanyapi-0.92.0 → getanyapi-0.93.1}/src/getanyapi/platforms/person.py +0 -0
  63. {getanyapi-0.92.0 → getanyapi-0.93.1}/src/getanyapi/platforms/person_enrichment.py +0 -0
  64. {getanyapi-0.92.0 → getanyapi-0.93.1}/src/getanyapi/platforms/pexels.py +0 -0
  65. {getanyapi-0.92.0 → getanyapi-0.93.1}/src/getanyapi/platforms/playstore.py +0 -0
  66. {getanyapi-0.92.0 → getanyapi-0.93.1}/src/getanyapi/platforms/polymarket.py +0 -0
  67. {getanyapi-0.92.0 → getanyapi-0.93.1}/src/getanyapi/platforms/property_records.py +0 -0
  68. {getanyapi-0.92.0 → getanyapi-0.93.1}/src/getanyapi/platforms/realtor.py +0 -0
  69. {getanyapi-0.92.0 → getanyapi-0.93.1}/src/getanyapi/platforms/redfin.py +0 -0
  70. {getanyapi-0.92.0 → getanyapi-0.93.1}/src/getanyapi/platforms/rednote.py +0 -0
  71. {getanyapi-0.92.0 → getanyapi-0.93.1}/src/getanyapi/platforms/sec.py +0 -0
  72. {getanyapi-0.92.0 → getanyapi-0.93.1}/src/getanyapi/platforms/semrush.py +0 -0
  73. {getanyapi-0.92.0 → getanyapi-0.93.1}/src/getanyapi/platforms/seo.py +0 -0
  74. {getanyapi-0.92.0 → getanyapi-0.93.1}/src/getanyapi/platforms/similarweb.py +0 -0
  75. {getanyapi-0.92.0 → getanyapi-0.93.1}/src/getanyapi/platforms/snapchat.py +0 -0
  76. {getanyapi-0.92.0 → getanyapi-0.93.1}/src/getanyapi/platforms/social.py +0 -0
  77. {getanyapi-0.92.0 → getanyapi-0.93.1}/src/getanyapi/platforms/spotify.py +0 -0
  78. {getanyapi-0.92.0 → getanyapi-0.93.1}/src/getanyapi/platforms/substack.py +0 -0
  79. {getanyapi-0.92.0 → getanyapi-0.93.1}/src/getanyapi/platforms/technographics.py +0 -0
  80. {getanyapi-0.92.0 → getanyapi-0.93.1}/src/getanyapi/platforms/threads.py +0 -0
  81. {getanyapi-0.92.0 → getanyapi-0.93.1}/src/getanyapi/platforms/tiktok.py +0 -0
  82. {getanyapi-0.92.0 → getanyapi-0.93.1}/src/getanyapi/platforms/tiktok_shop.py +0 -0
  83. {getanyapi-0.92.0 → getanyapi-0.93.1}/src/getanyapi/platforms/tripadvisor.py +0 -0
  84. {getanyapi-0.92.0 → getanyapi-0.93.1}/src/getanyapi/platforms/trustpilot.py +0 -0
  85. {getanyapi-0.92.0 → getanyapi-0.93.1}/src/getanyapi/platforms/truthsocial.py +0 -0
  86. {getanyapi-0.92.0 → getanyapi-0.93.1}/src/getanyapi/platforms/unsplash.py +0 -0
  87. {getanyapi-0.92.0 → getanyapi-0.93.1}/src/getanyapi/platforms/upwork.py +0 -0
  88. {getanyapi-0.92.0 → getanyapi-0.93.1}/src/getanyapi/platforms/walmart.py +0 -0
  89. {getanyapi-0.92.0 → getanyapi-0.93.1}/src/getanyapi/platforms/web.py +0 -0
  90. {getanyapi-0.92.0 → getanyapi-0.93.1}/src/getanyapi/platforms/weibo.py +0 -0
  91. {getanyapi-0.92.0 → getanyapi-0.93.1}/src/getanyapi/platforms/yahoo_finance.py +0 -0
  92. {getanyapi-0.92.0 → getanyapi-0.93.1}/src/getanyapi/platforms/yelp.py +0 -0
  93. {getanyapi-0.92.0 → getanyapi-0.93.1}/src/getanyapi/platforms/youtube.py +0 -0
  94. {getanyapi-0.92.0 → getanyapi-0.93.1}/src/getanyapi/platforms/zhihu.py +0 -0
  95. {getanyapi-0.92.0 → getanyapi-0.93.1}/src/getanyapi/platforms/zillow.py +0 -0
  96. {getanyapi-0.92.0 → getanyapi-0.93.1}/src/getanyapi/py.typed +0 -0
  97. {getanyapi-0.92.0 → getanyapi-0.93.1}/src/getanyapi/types.py +0 -0
  98. {getanyapi-0.92.0 → getanyapi-0.93.1}/tests/conftest.py +0 -0
  99. {getanyapi-0.92.0 → getanyapi-0.93.1}/tests/test_account.py +0 -0
  100. {getanyapi-0.92.0 → getanyapi-0.93.1}/tests/test_client.py +0 -0
  101. {getanyapi-0.92.0 → getanyapi-0.93.1}/tests/test_durable_requests.py +0 -0
  102. {getanyapi-0.92.0 → getanyapi-0.93.1}/tests/test_envelope.py +0 -0
  103. {getanyapi-0.92.0 → getanyapi-0.93.1}/tests/test_errors.py +0 -0
  104. {getanyapi-0.92.0 → getanyapi-0.93.1}/tests/test_fixture_roundtrip.py +0 -0
  105. {getanyapi-0.92.0 → getanyapi-0.93.1}/tests/test_fixture_sweep.py +0 -0
  106. {getanyapi-0.92.0 → getanyapi-0.93.1}/tests/test_not_found_reason.py +0 -0
  107. {getanyapi-0.92.0 → getanyapi-0.93.1}/tests/test_pagination.py +0 -0
  108. {getanyapi-0.92.0 → getanyapi-0.93.1}/tests/test_transport.py +0 -0
  109. {getanyapi-0.92.0 → getanyapi-0.93.1}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: getanyapi
3
- Version: 0.92.0
3
+ Version: 0.93.1
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.92.0"
7
+ version = "0.93.1"
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"
@@ -55,7 +55,7 @@ from .types import (
55
55
  unwrap,
56
56
  )
57
57
 
58
- __version__ = "0.92.0"
58
+ __version__ = "0.93.1"
59
59
 
60
60
  __all__ = [
61
61
  # clients + top-level functions
@@ -198,7 +198,7 @@ class GoogleSearchInput(TypedDict, total=False):
198
198
  ignoreSources: NotRequired[list[str]]
199
199
  """Optional. Source ids to skip for this request, taken from this endpoint's `lanes[].source.id`. The cheapest remaining source serves and the price is that of the dearest remaining source. An id that does not serve this endpoint, or that is also in `source`, is rejected as invalid input with no charge; skipping every source is rejected the same way."""
200
200
  limit: NotRequired[int]
201
- """Maximum number of organic results to return in this response. Google stopped honoring bulk result counts in September 2025, so one page is about 10 results and a limit above 10 is accepted but will not return more than that. To go deeper, send page (about 10 results per page, each billed as a request) or use google.search_100, which returns up to 100 ranked results in a single call for one flat charge and is cheaper past roughly 20 results. Price is flat per request. Range: 1 to 100. Default: 10."""
201
+ """Page size to ask for. Google returns about 10 organic results per page and stopped honoring larger counts in September 2025, so a limit above 10 still returns about 10. Some sources return their whole page of about 10 whatever limit says: a page is never trimmed after the call, so nextCursor always continues exactly where this response ended. To go deeper, send page (about 10 results per page, each billed as a request) or use google.search_100, which returns up to 100 ranked results in a single call for one flat charge and is cheaper past roughly 20 results. Price is flat per request. Range: 1 to 100. Default: 10."""
202
202
  location: NotRequired[str]
203
203
  """Fine-grained location to localize results to, more specific than the country-level gl. Send it as an Active Canonical Name from Google's geo-target list: place, then each parent region, then country, with no space after each comma, e.g. 'New York,New York,United States', 'Austin,Texas,United States', 'London,England,United Kingdom'. Common variations are translated to that name when they point to exactly one place: spaces after commas, missing accents, a US state abbreviation ('Orlando, FL, United States'), or a skipped region ('Sydney, Australia'). A value that names no place, or more than one, is rejected rather than quietly searched from somewhere else."""
204
204
  page: NotRequired[int]
@@ -257,6 +257,8 @@ class LinkedinJobsInput(TypedDict, total=False):
257
257
  """Optional, default true. When false, only the sources listed in `source` may serve; the request is refused with no charge if none of them can. When true, the listed sources are tried first and any other source may serve after them, at the normal price. Default: true."""
258
258
  company: NotRequired[str]
259
259
  """Filter to a specific company by name (e.g. Google)."""
260
+ cursor: NotRequired[str]
261
+ """Opaque pagination cursor from a previous response's nextCursor. Omit for the first page; pass it to fetch the next page of job listings."""
260
262
  easyApply: NotRequired[bool]
261
263
  """When true, only return jobs offering LinkedIn Easy Apply."""
262
264
  employmentType: NotRequired[
@@ -272,7 +274,7 @@ class LinkedinJobsInput(TypedDict, total=False):
272
274
  ignoreSources: NotRequired[list[str]]
273
275
  """Optional. Source ids to skip for this request, taken from this endpoint's `lanes[].source.id`. The cheapest remaining source serves and the price is that of the dearest remaining source. An id that does not serve this endpoint, or that is also in `source`, is rejected as invalid input with no charge; skipping every source is rejected the same way."""
274
276
  limit: NotRequired[int]
275
- """Maximum number of results to return (1-25, default 25). You are billed per result returned, so a lower limit costs less. Range: 1 to 25."""
277
+ """Accepted for compatibility and ignored: each call returns one full page of up to 25 jobs at one flat price per call; follow nextCursor for more. Range: 1 to 25."""
276
278
  location: NotRequired[str]
277
279
  """City, region, or country to search within (e.g. United States, San Francisco)."""
278
280
  postedLimit: NotRequired[Literal["1h", "24h", "week", "month"]]
@@ -304,6 +306,8 @@ class LinkedinJobsThinInput(TypedDict, total=False):
304
306
  """Optional, default true. When false, only the sources listed in `source` may serve; the request is refused with no charge if none of them can. When true, the listed sources are tried first and any other source may serve after them, at the normal price. Default: true."""
305
307
  companyId: NotRequired[str]
306
308
  """Filter to a specific company by its LinkedIn numeric company id."""
309
+ cursor: NotRequired[str]
310
+ """Opaque pagination cursor from a previous response's nextCursor. Omit for the first page; pass it to fetch the next page of job listings."""
307
311
  employmentType: NotRequired[
308
312
  Literal["full-time", "part-time", "contract", "internship", "temporary"]
309
313
  ]
@@ -319,7 +323,7 @@ class LinkedinJobsThinInput(TypedDict, total=False):
319
323
  ignoreSources: NotRequired[list[str]]
320
324
  """Optional. Source ids to skip for this request, taken from this endpoint's `lanes[].source.id`. The cheapest remaining source serves and the price is that of the dearest remaining source. An id that does not serve this endpoint, or that is also in `source`, is rejected as invalid input with no charge; skipping every source is rejected the same way."""
321
325
  limit: NotRequired[int]
322
- """Maximum number of results to return (1-25, default 25). Range: 1 to 25."""
326
+ """Accepted for compatibility and ignored: each call returns one full source page (10 or 25 jobs depending on source); follow nextCursor for more. Range: 1 to 25."""
323
327
  location: NotRequired[str]
324
328
  """City, region, or country to search within."""
325
329
  postedLimit: NotRequired[Literal["24h", "week", "month"]]
@@ -2105,9 +2109,16 @@ class LinkedinJobSalary(BaseModel):
2105
2109
 
2106
2110
 
2107
2111
  class LinkedinJobsData(BaseModel):
2112
+ model_config = ConfigDict(populate_by_name=True)
2113
+
2108
2114
  items: list[LinkedinJobsItem] = Field(
2109
2115
  description="Full job listing records for the search. Populated whenever the provider has data for the entity."
2110
2116
  )
2117
+ next_cursor: str | None = Field(
2118
+ default=None,
2119
+ alias="nextCursor",
2120
+ description="Opaque cursor for the next page of job listings, or null when there are no more. Pass it back as cursor to continue.",
2121
+ )
2111
2122
 
2112
2123
 
2113
2124
  class LinkedinJobsItem(BaseModel):
@@ -2248,9 +2259,16 @@ class LinkedinJobsSalary(BaseModel):
2248
2259
 
2249
2260
 
2250
2261
  class LinkedinJobsThinData(BaseModel):
2262
+ model_config = ConfigDict(populate_by_name=True)
2263
+
2251
2264
  items: list[LinkedinJobsThinItem] = Field(
2252
2265
  description="Job listing index records for the search. Populated whenever the provider has data for the entity."
2253
2266
  )
2267
+ next_cursor: str | None = Field(
2268
+ default=None,
2269
+ alias="nextCursor",
2270
+ description="Opaque cursor for the next page of job listings, or null when there are no more. Pass it back as cursor to continue.",
2271
+ )
2254
2272
 
2255
2273
 
2256
2274
  class LinkedinJobsThinItem(BaseModel):
@@ -4630,7 +4648,7 @@ class LinkedinNamespace:
4630
4648
  description, salary, applicant count, seniority, company details, and
4631
4649
  benefits. Up to 25 jobs per request.
4632
4650
 
4633
- Price: $0.0011 per request plus $0.0011 per result (maximum $0.0286).
4651
+ Price: $0.0286 per request plus $0 per result (maximum $0.0286).
4634
4652
 
4635
4653
  Example:
4636
4654
  res = client.linkedin.jobs(limit=3, location="United States", query="software engineer", workplaceType="remote")
@@ -4640,6 +4658,29 @@ class LinkedinNamespace:
4640
4658
  )
4641
4659
  return RunResult[LinkedinJobsData].model_validate(raw)
4642
4660
 
4661
+ def iter_jobs(
4662
+ self,
4663
+ *,
4664
+ options: RequestOptions | None = None,
4665
+ **input: Unpack[LinkedinJobsInput],
4666
+ ) -> Paginator[LinkedinJobsItem, LinkedinJobsData]:
4667
+ """Iterate LinkedIn Jobs results, following pagination cursors.
4668
+
4669
+ Yields validated `LinkedinJobsItem` items from the `items` field of
4670
+ each page. Use `.pages()` on the returned paginator to walk whole
4671
+ `RunResult` pages.
4672
+ """
4673
+ return paginate(
4674
+ self._client,
4675
+ "linkedin.jobs",
4676
+ dict(input),
4677
+ "items",
4678
+ item_model=LinkedinJobsItem,
4679
+ data_model=LinkedinJobsData,
4680
+ bare=False,
4681
+ options=options,
4682
+ )
4683
+
4643
4684
  def jobs_thin(
4644
4685
  self,
4645
4686
  *,
@@ -4661,6 +4702,29 @@ class LinkedinNamespace:
4661
4702
  )
4662
4703
  return RunResult[LinkedinJobsThinData].model_validate(raw)
4663
4704
 
4705
+ def iter_jobs_thin(
4706
+ self,
4707
+ *,
4708
+ options: RequestOptions | None = None,
4709
+ **input: Unpack[LinkedinJobsThinInput],
4710
+ ) -> Paginator[LinkedinJobsThinItem, LinkedinJobsThinData]:
4711
+ """Iterate LinkedIn Jobs (index) results, following pagination cursors.
4712
+
4713
+ Yields validated `LinkedinJobsThinItem` items from the `items` field of
4714
+ each page. Use `.pages()` on the returned paginator to walk whole
4715
+ `RunResult` pages.
4716
+ """
4717
+ return paginate(
4718
+ self._client,
4719
+ "linkedin.jobs_thin",
4720
+ dict(input),
4721
+ "items",
4722
+ item_model=LinkedinJobsThinItem,
4723
+ data_model=LinkedinJobsThinData,
4724
+ bare=False,
4725
+ options=options,
4726
+ )
4727
+
4664
4728
  def post(
4665
4729
  self,
4666
4730
  *,
@@ -5397,7 +5461,7 @@ class AsyncLinkedinNamespace:
5397
5461
  description, salary, applicant count, seniority, company details, and
5398
5462
  benefits. Up to 25 jobs per request.
5399
5463
 
5400
- Price: $0.0011 per request plus $0.0011 per result (maximum $0.0286).
5464
+ Price: $0.0286 per request plus $0 per result (maximum $0.0286).
5401
5465
 
5402
5466
  Example:
5403
5467
  res = client.linkedin.jobs(limit=3, location="United States", query="software engineer", workplaceType="remote")
@@ -5407,6 +5471,29 @@ class AsyncLinkedinNamespace:
5407
5471
  )
5408
5472
  return RunResult[LinkedinJobsData].model_validate(raw)
5409
5473
 
5474
+ def iter_jobs(
5475
+ self,
5476
+ *,
5477
+ options: RequestOptions | None = None,
5478
+ **input: Unpack[LinkedinJobsInput],
5479
+ ) -> AsyncPaginator[LinkedinJobsItem, LinkedinJobsData]:
5480
+ """Iterate LinkedIn Jobs results, following pagination cursors.
5481
+
5482
+ Yields validated `LinkedinJobsItem` items from the `items` field of
5483
+ each page. Use `.pages()` on the returned paginator to walk whole
5484
+ `RunResult` pages.
5485
+ """
5486
+ return apaginate(
5487
+ self._client,
5488
+ "linkedin.jobs",
5489
+ dict(input),
5490
+ "items",
5491
+ item_model=LinkedinJobsItem,
5492
+ data_model=LinkedinJobsData,
5493
+ bare=False,
5494
+ options=options,
5495
+ )
5496
+
5410
5497
  async def jobs_thin(
5411
5498
  self,
5412
5499
  *,
@@ -5428,6 +5515,29 @@ class AsyncLinkedinNamespace:
5428
5515
  )
5429
5516
  return RunResult[LinkedinJobsThinData].model_validate(raw)
5430
5517
 
5518
+ def iter_jobs_thin(
5519
+ self,
5520
+ *,
5521
+ options: RequestOptions | None = None,
5522
+ **input: Unpack[LinkedinJobsThinInput],
5523
+ ) -> AsyncPaginator[LinkedinJobsThinItem, LinkedinJobsThinData]:
5524
+ """Iterate LinkedIn Jobs (index) results, following pagination cursors.
5525
+
5526
+ Yields validated `LinkedinJobsThinItem` items from the `items` field of
5527
+ each page. Use `.pages()` on the returned paginator to walk whole
5528
+ `RunResult` pages.
5529
+ """
5530
+ return apaginate(
5531
+ self._client,
5532
+ "linkedin.jobs_thin",
5533
+ dict(input),
5534
+ "items",
5535
+ item_model=LinkedinJobsThinItem,
5536
+ data_model=LinkedinJobsThinData,
5537
+ bare=False,
5538
+ options=options,
5539
+ )
5540
+
5431
5541
  async def post(
5432
5542
  self,
5433
5543
  *,
@@ -197,7 +197,7 @@ class MapsSearchNearbyInput(TypedDict, total=False):
197
197
  language: NotRequired[str]
198
198
  """Two-letter language code for the results (e.g. en). Default: en."""
199
199
  limit: NotRequired[int]
200
- """Maximum number of places to return in this response (1-20). Google Maps returns one viewport of about 20 places per call; page with cursor for more. Price is flat per request. Range: 1 to 20. Default: 20."""
200
+ """Accepted but does not change the page: every call returns one full Google Maps viewport of about 20 places, never trimmed, so nextCursor continues exactly where this response ended. Price is flat per request. Range: 1 to 20. Default: 20."""
201
201
  preferLatencyUnderMs: NotRequired[int]
202
202
  """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."""
203
203
  query: Required[str]
@@ -31,7 +31,7 @@ class PinterestSearchInput(TypedDict, total=False):
31
31
  ignoreSources: NotRequired[list[str]]
32
32
  """Optional. Source ids to skip for this request, taken from this endpoint's `lanes[].source.id`. The cheapest remaining source serves and the price is that of the dearest remaining source. An id that does not serve this endpoint, or that is also in `source`, is rejected as invalid input with no charge; skipping every source is rejected the same way."""
33
33
  limit: NotRequired[int]
34
- """Maximum number of results to return from this page (1-20). Range: 1 to 20."""
34
+ """Page size to ask for (1-20). Some sources return their whole page of about 20 pins whatever limit says: a page is never trimmed after the call, so nextCursor continues exactly where this response ended. Range: 1 to 20."""
35
35
  preferLatencyUnderMs: NotRequired[int]
36
36
  """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."""
37
37
  query: Required[str]
@@ -156,7 +156,7 @@ class RedditSubredditPostsInput(TypedDict, total=False):
156
156
  ignoreSources: NotRequired[list[str]]
157
157
  """Optional. Source ids to skip for this request, taken from this endpoint's `lanes[].source.id`. The cheapest remaining source serves and the price is that of the dearest remaining source. An id that does not serve this endpoint, or that is also in `source`, is rejected as invalid input with no charge; skipping every source is rejected the same way."""
158
158
  limit: NotRequired[int]
159
- """Requested number of posts. Note: the upstream returns one page (about 25 posts) per call; values larger than a page are not delivered in a single response. To fetch more, pass `nextCursor` back as `cursor`. Range: 1 to 100. Default: 25."""
159
+ """Page size to ask for (up to 100). Some sources honor it; others always return their whole page of about 25 posts. A page is never trimmed after the call, so pass nextCursor back as cursor to continue exactly where this response ended. Range: 1 to 100. Default: 25."""
160
160
  preferLatencyUnderMs: NotRequired[int]
161
161
  """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."""
162
162
  requireFields: NotRequired[
@@ -231,7 +231,7 @@ class RedditUserCommentsInput(TypedDict, total=False):
231
231
  ignoreSources: NotRequired[list[str]]
232
232
  """Optional. Source ids to skip for this request, taken from this endpoint's `lanes[].source.id`. The cheapest remaining source serves and the price is that of the dearest remaining source. An id that does not serve this endpoint, or that is also in `source`, is rejected as invalid input with no charge; skipping every source is rejected the same way."""
233
233
  limit: NotRequired[int]
234
- """Maximum number of comments to return in this response (a page cap, not a total). Defaults to 25. Range: 1 to 100. Default: 25."""
234
+ """Page size to ask for (up to 100, default 25). Some sources honor it; others always return their whole page of about 25 comments. A page is never trimmed after the call, so pass nextCursor back as cursor to continue exactly where this response ended. Range: 1 to 100. Default: 25."""
235
235
  preferLatencyUnderMs: NotRequired[int]
236
236
  """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."""
237
237
  sort: NotRequired[Literal["new", "top", "hot", "controversial"]]
@@ -76,7 +76,7 @@ class TwitterFollowersInput(TypedDict, total=False):
76
76
  ignoreSources: NotRequired[list[str]]
77
77
  """Optional. Source ids to skip for this request, taken from this endpoint's `lanes[].source.id`. The cheapest remaining source serves and the price is that of the dearest remaining source. An id that does not serve this endpoint, or that is also in `source`, is rejected as invalid input with no charge; skipping every source is rejected the same way."""
78
78
  limit: NotRequired[int]
79
- """Per-page maximum number of followers to return (default 200). A native page holds up to 200 accounts, so a larger limit still returns at most one native page; follow the response's nextCursor for more. Range: 1 to 100000. Default: 200."""
79
+ """Accepted but does not change the page: every call returns one full native page of followers (up to 200, depending on the source), never trimmed, so follow nextCursor to continue exactly where this response ended. Range: 1 to 100000. Default: 200."""
80
80
  preferLatencyUnderMs: NotRequired[int]
81
81
  """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."""
82
82
  requireFields: NotRequired[list[Literal["bio", "following"]]]
@@ -97,7 +97,7 @@ class TwitterFollowingInput(TypedDict, total=False):
97
97
  ignoreSources: NotRequired[list[str]]
98
98
  """Optional. Source ids to skip for this request, taken from this endpoint's `lanes[].source.id`. The cheapest remaining source serves and the price is that of the dearest remaining source. An id that does not serve this endpoint, or that is also in `source`, is rejected as invalid input with no charge; skipping every source is rejected the same way."""
99
99
  limit: NotRequired[int]
100
- """Per-page maximum number of followed accounts to return (default 200). A limit larger than the native page still returns at most one native page; follow the response's nextCursor for more. Range: 1 to 100000. Default: 200."""
100
+ """Accepted but does not change the page: every call returns one full native page of followed accounts (about 50), never trimmed, so follow nextCursor to continue exactly where this response ended. Range: 1 to 100000. Default: 200."""
101
101
  preferLatencyUnderMs: NotRequired[int]
102
102
  """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."""
103
103
  requireFields: NotRequired[list[Literal["location"]]]
@@ -154,7 +154,7 @@ class TwitterSearchInput(TypedDict, total=False):
154
154
  ignoreSources: NotRequired[list[str]]
155
155
  """Optional. Source ids to skip for this request, taken from this endpoint's `lanes[].source.id`. The cheapest remaining source serves and the price is that of the dearest remaining source. An id that does not serve this endpoint, or that is also in `source`, is rejected as invalid input with no charge; skipping every source is rejected the same way."""
156
156
  limit: NotRequired[int]
157
- """Per-page maximum number of results to return (1-50, default 20). A provider may return a smaller native page; follow nextCursor for more. Range: 1 to 50. Default: 20."""
157
+ """Page size to ask for (1-50, default 20). Some sources honor it; others always return their whole native page of about 20. A page is never trimmed after the call, so follow nextCursor to continue exactly where this response ended. Range: 1 to 50. Default: 20."""
158
158
  preferLatencyUnderMs: NotRequired[int]
159
159
  """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."""
160
160
  query: Required[str]
@@ -304,7 +304,7 @@ class TwitterUserTweetsInput(TypedDict, total=False):
304
304
  ignoreSources: NotRequired[list[str]]
305
305
  """Optional. Source ids to skip for this request, taken from this endpoint's `lanes[].source.id`. The cheapest remaining source serves and the price is that of the dearest remaining source. An id that does not serve this endpoint, or that is also in `source`, is rejected as invalid input with no charge; skipping every source is rejected the same way."""
306
306
  limit: NotRequired[int]
307
- """Maximum number of authored tweets and replies to return in THIS page (1-100). Sources return fewer - most cap at 20 - so read `nextCursor` and pass it back as `cursor` to walk further rather than asking for one large page. Range: 1 to 100. Default: 20."""
307
+ """Page size to ask for (1-100, default 20). Some sources honor it; others always return their whole native page of about 20 authored tweets and replies. A page is never trimmed after the call, so follow nextCursor and pass it back as cursor to continue exactly where this response ended. Range: 1 to 100. Default: 20."""
308
308
  preferLatencyUnderMs: NotRequired[int]
309
309
  """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."""
310
310
  requireFields: NotRequired[list[Literal["isPinned"]]]
@@ -1796,7 +1796,7 @@ class TwitterNamespace:
1796
1796
  records with follower, following, and post counts plus cursor pagination.
1797
1797
  Use twitter.search for posts.
1798
1798
 
1799
- Price: $0.00075 per request.
1799
+ Price: $0.0007 per request.
1800
1800
 
1801
1801
  Example:
1802
1802
  res = client.twitter.search_users(query="ai agents")
@@ -2336,7 +2336,7 @@ class AsyncTwitterNamespace:
2336
2336
  records with follower, following, and post counts plus cursor pagination.
2337
2337
  Use twitter.search for posts.
2338
2338
 
2339
- Price: $0.00075 per request.
2339
+ Price: $0.0007 per request.
2340
2340
 
2341
2341
  Example:
2342
2342
  res = client.twitter.search_users(query="ai agents")
File without changes
File without changes
File without changes
File without changes