getanyapi 0.91.16__tar.gz → 0.92.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 (109) hide show
  1. {getanyapi-0.91.16 → getanyapi-0.92.0}/PKG-INFO +1 -1
  2. {getanyapi-0.91.16 → getanyapi-0.92.0}/pyproject.toml +1 -1
  3. {getanyapi-0.91.16 → getanyapi-0.92.0}/src/getanyapi/__init__.py +1 -1
  4. {getanyapi-0.91.16 → getanyapi-0.92.0}/src/getanyapi/platforms/instagram.py +2 -2
  5. {getanyapi-0.91.16 → getanyapi-0.92.0}/src/getanyapi/platforms/linkedin.py +116 -2
  6. {getanyapi-0.91.16 → getanyapi-0.92.0}/src/getanyapi/platforms/twitter.py +2 -2
  7. {getanyapi-0.91.16 → getanyapi-0.92.0}/.gitignore +0 -0
  8. {getanyapi-0.91.16 → getanyapi-0.92.0}/README.md +0 -0
  9. {getanyapi-0.91.16 → getanyapi-0.92.0}/src/getanyapi/_account.py +0 -0
  10. {getanyapi-0.91.16 → getanyapi-0.92.0}/src/getanyapi/_async_client.py +0 -0
  11. {getanyapi-0.91.16 → getanyapi-0.92.0}/src/getanyapi/_client.py +0 -0
  12. {getanyapi-0.91.16 → getanyapi-0.92.0}/src/getanyapi/_errors.py +0 -0
  13. {getanyapi-0.91.16 → getanyapi-0.92.0}/src/getanyapi/_idempotency.py +0 -0
  14. {getanyapi-0.91.16 → getanyapi-0.92.0}/src/getanyapi/_pagination.py +0 -0
  15. {getanyapi-0.91.16 → getanyapi-0.92.0}/src/getanyapi/_transport.py +0 -0
  16. {getanyapi-0.91.16 → getanyapi-0.92.0}/src/getanyapi/discovery_types.py +0 -0
  17. {getanyapi-0.91.16 → getanyapi-0.92.0}/src/getanyapi/platforms/__init__.py +0 -0
  18. {getanyapi-0.91.16 → getanyapi-0.92.0}/src/getanyapi/platforms/ahrefs.py +0 -0
  19. {getanyapi-0.91.16 → getanyapi-0.92.0}/src/getanyapi/platforms/airbnb.py +0 -0
  20. {getanyapi-0.91.16 → getanyapi-0.92.0}/src/getanyapi/platforms/alibaba.py +0 -0
  21. {getanyapi-0.91.16 → getanyapi-0.92.0}/src/getanyapi/platforms/amazon.py +0 -0
  22. {getanyapi-0.91.16 → getanyapi-0.92.0}/src/getanyapi/platforms/apollo.py +0 -0
  23. {getanyapi-0.91.16 → getanyapi-0.92.0}/src/getanyapi/platforms/appstore.py +0 -0
  24. {getanyapi-0.91.16 → getanyapi-0.92.0}/src/getanyapi/platforms/bluesky.py +0 -0
  25. {getanyapi-0.91.16 → getanyapi-0.92.0}/src/getanyapi/platforms/booking.py +0 -0
  26. {getanyapi-0.91.16 → getanyapi-0.92.0}/src/getanyapi/platforms/capterra.py +0 -0
  27. {getanyapi-0.91.16 → getanyapi-0.92.0}/src/getanyapi/platforms/chatgpt.py +0 -0
  28. {getanyapi-0.91.16 → getanyapi-0.92.0}/src/getanyapi/platforms/coinmarketcap.py +0 -0
  29. {getanyapi-0.91.16 → getanyapi-0.92.0}/src/getanyapi/platforms/company.py +0 -0
  30. {getanyapi-0.91.16 → getanyapi-0.92.0}/src/getanyapi/platforms/company_enrichment.py +0 -0
  31. {getanyapi-0.91.16 → getanyapi-0.92.0}/src/getanyapi/platforms/company_identify.py +0 -0
  32. {getanyapi-0.91.16 → getanyapi-0.92.0}/src/getanyapi/platforms/company_search.py +0 -0
  33. {getanyapi-0.91.16 → getanyapi-0.92.0}/src/getanyapi/platforms/congress.py +0 -0
  34. {getanyapi-0.91.16 → getanyapi-0.92.0}/src/getanyapi/platforms/contact_enrichment.py +0 -0
  35. {getanyapi-0.91.16 → getanyapi-0.92.0}/src/getanyapi/platforms/douyin.py +0 -0
  36. {getanyapi-0.91.16 → getanyapi-0.92.0}/src/getanyapi/platforms/ebay.py +0 -0
  37. {getanyapi-0.91.16 → getanyapi-0.92.0}/src/getanyapi/platforms/email.py +0 -0
  38. {getanyapi-0.91.16 → getanyapi-0.92.0}/src/getanyapi/platforms/email_finding.py +0 -0
  39. {getanyapi-0.91.16 → getanyapi-0.92.0}/src/getanyapi/platforms/email_verification.py +0 -0
  40. {getanyapi-0.91.16 → getanyapi-0.92.0}/src/getanyapi/platforms/facebook.py +0 -0
  41. {getanyapi-0.91.16 → getanyapi-0.92.0}/src/getanyapi/platforms/fiverr.py +0 -0
  42. {getanyapi-0.91.16 → getanyapi-0.92.0}/src/getanyapi/platforms/g2.py +0 -0
  43. {getanyapi-0.91.16 → getanyapi-0.92.0}/src/getanyapi/platforms/gemini.py +0 -0
  44. {getanyapi-0.91.16 → getanyapi-0.92.0}/src/getanyapi/platforms/github.py +0 -0
  45. {getanyapi-0.91.16 → getanyapi-0.92.0}/src/getanyapi/platforms/glassdoor.py +0 -0
  46. {getanyapi-0.91.16 → getanyapi-0.92.0}/src/getanyapi/platforms/google.py +0 -0
  47. {getanyapi-0.91.16 → getanyapi-0.92.0}/src/getanyapi/platforms/google_ads.py +0 -0
  48. {getanyapi-0.91.16 → getanyapi-0.92.0}/src/getanyapi/platforms/google_finance.py +0 -0
  49. {getanyapi-0.91.16 → getanyapi-0.92.0}/src/getanyapi/platforms/google_hotels.py +0 -0
  50. {getanyapi-0.91.16 → getanyapi-0.92.0}/src/getanyapi/platforms/google_shopping.py +0 -0
  51. {getanyapi-0.91.16 → getanyapi-0.92.0}/src/getanyapi/platforms/hackernews.py +0 -0
  52. {getanyapi-0.91.16 → getanyapi-0.92.0}/src/getanyapi/platforms/indeed.py +0 -0
  53. {getanyapi-0.91.16 → getanyapi-0.92.0}/src/getanyapi/platforms/job_search.py +0 -0
  54. {getanyapi-0.91.16 → getanyapi-0.92.0}/src/getanyapi/platforms/maps.py +0 -0
  55. {getanyapi-0.91.16 → getanyapi-0.92.0}/src/getanyapi/platforms/mobile_phone.py +0 -0
  56. {getanyapi-0.91.16 → getanyapi-0.92.0}/src/getanyapi/platforms/naver.py +0 -0
  57. {getanyapi-0.91.16 → getanyapi-0.92.0}/src/getanyapi/platforms/nextdoor.py +0 -0
  58. {getanyapi-0.91.16 → getanyapi-0.92.0}/src/getanyapi/platforms/people_search.py +0 -0
  59. {getanyapi-0.91.16 → getanyapi-0.92.0}/src/getanyapi/platforms/perplexity.py +0 -0
  60. {getanyapi-0.91.16 → getanyapi-0.92.0}/src/getanyapi/platforms/person.py +0 -0
  61. {getanyapi-0.91.16 → getanyapi-0.92.0}/src/getanyapi/platforms/person_enrichment.py +0 -0
  62. {getanyapi-0.91.16 → getanyapi-0.92.0}/src/getanyapi/platforms/pexels.py +0 -0
  63. {getanyapi-0.91.16 → getanyapi-0.92.0}/src/getanyapi/platforms/pinterest.py +0 -0
  64. {getanyapi-0.91.16 → getanyapi-0.92.0}/src/getanyapi/platforms/playstore.py +0 -0
  65. {getanyapi-0.91.16 → getanyapi-0.92.0}/src/getanyapi/platforms/polymarket.py +0 -0
  66. {getanyapi-0.91.16 → getanyapi-0.92.0}/src/getanyapi/platforms/property_records.py +0 -0
  67. {getanyapi-0.91.16 → getanyapi-0.92.0}/src/getanyapi/platforms/realtor.py +0 -0
  68. {getanyapi-0.91.16 → getanyapi-0.92.0}/src/getanyapi/platforms/reddit.py +0 -0
  69. {getanyapi-0.91.16 → getanyapi-0.92.0}/src/getanyapi/platforms/redfin.py +0 -0
  70. {getanyapi-0.91.16 → getanyapi-0.92.0}/src/getanyapi/platforms/rednote.py +0 -0
  71. {getanyapi-0.91.16 → getanyapi-0.92.0}/src/getanyapi/platforms/sec.py +0 -0
  72. {getanyapi-0.91.16 → getanyapi-0.92.0}/src/getanyapi/platforms/semrush.py +0 -0
  73. {getanyapi-0.91.16 → getanyapi-0.92.0}/src/getanyapi/platforms/seo.py +0 -0
  74. {getanyapi-0.91.16 → getanyapi-0.92.0}/src/getanyapi/platforms/similarweb.py +0 -0
  75. {getanyapi-0.91.16 → getanyapi-0.92.0}/src/getanyapi/platforms/snapchat.py +0 -0
  76. {getanyapi-0.91.16 → getanyapi-0.92.0}/src/getanyapi/platforms/social.py +0 -0
  77. {getanyapi-0.91.16 → getanyapi-0.92.0}/src/getanyapi/platforms/spotify.py +0 -0
  78. {getanyapi-0.91.16 → getanyapi-0.92.0}/src/getanyapi/platforms/substack.py +0 -0
  79. {getanyapi-0.91.16 → getanyapi-0.92.0}/src/getanyapi/platforms/technographics.py +0 -0
  80. {getanyapi-0.91.16 → getanyapi-0.92.0}/src/getanyapi/platforms/threads.py +0 -0
  81. {getanyapi-0.91.16 → getanyapi-0.92.0}/src/getanyapi/platforms/tiktok.py +0 -0
  82. {getanyapi-0.91.16 → getanyapi-0.92.0}/src/getanyapi/platforms/tiktok_shop.py +0 -0
  83. {getanyapi-0.91.16 → getanyapi-0.92.0}/src/getanyapi/platforms/tripadvisor.py +0 -0
  84. {getanyapi-0.91.16 → getanyapi-0.92.0}/src/getanyapi/platforms/trustpilot.py +0 -0
  85. {getanyapi-0.91.16 → getanyapi-0.92.0}/src/getanyapi/platforms/truthsocial.py +0 -0
  86. {getanyapi-0.91.16 → getanyapi-0.92.0}/src/getanyapi/platforms/unsplash.py +0 -0
  87. {getanyapi-0.91.16 → getanyapi-0.92.0}/src/getanyapi/platforms/upwork.py +0 -0
  88. {getanyapi-0.91.16 → getanyapi-0.92.0}/src/getanyapi/platforms/walmart.py +0 -0
  89. {getanyapi-0.91.16 → getanyapi-0.92.0}/src/getanyapi/platforms/web.py +0 -0
  90. {getanyapi-0.91.16 → getanyapi-0.92.0}/src/getanyapi/platforms/weibo.py +0 -0
  91. {getanyapi-0.91.16 → getanyapi-0.92.0}/src/getanyapi/platforms/yahoo_finance.py +0 -0
  92. {getanyapi-0.91.16 → getanyapi-0.92.0}/src/getanyapi/platforms/yelp.py +0 -0
  93. {getanyapi-0.91.16 → getanyapi-0.92.0}/src/getanyapi/platforms/youtube.py +0 -0
  94. {getanyapi-0.91.16 → getanyapi-0.92.0}/src/getanyapi/platforms/zhihu.py +0 -0
  95. {getanyapi-0.91.16 → getanyapi-0.92.0}/src/getanyapi/platforms/zillow.py +0 -0
  96. {getanyapi-0.91.16 → getanyapi-0.92.0}/src/getanyapi/py.typed +0 -0
  97. {getanyapi-0.91.16 → getanyapi-0.92.0}/src/getanyapi/types.py +0 -0
  98. {getanyapi-0.91.16 → getanyapi-0.92.0}/tests/conftest.py +0 -0
  99. {getanyapi-0.91.16 → getanyapi-0.92.0}/tests/test_account.py +0 -0
  100. {getanyapi-0.91.16 → getanyapi-0.92.0}/tests/test_client.py +0 -0
  101. {getanyapi-0.91.16 → getanyapi-0.92.0}/tests/test_durable_requests.py +0 -0
  102. {getanyapi-0.91.16 → getanyapi-0.92.0}/tests/test_envelope.py +0 -0
  103. {getanyapi-0.91.16 → getanyapi-0.92.0}/tests/test_errors.py +0 -0
  104. {getanyapi-0.91.16 → getanyapi-0.92.0}/tests/test_fixture_roundtrip.py +0 -0
  105. {getanyapi-0.91.16 → getanyapi-0.92.0}/tests/test_fixture_sweep.py +0 -0
  106. {getanyapi-0.91.16 → getanyapi-0.92.0}/tests/test_not_found_reason.py +0 -0
  107. {getanyapi-0.91.16 → getanyapi-0.92.0}/tests/test_pagination.py +0 -0
  108. {getanyapi-0.91.16 → getanyapi-0.92.0}/tests/test_transport.py +0 -0
  109. {getanyapi-0.91.16 → getanyapi-0.92.0}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: getanyapi
3
- Version: 0.91.16
3
+ Version: 0.92.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.91.16"
7
+ version = "0.92.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"
@@ -55,7 +55,7 @@ from .types import (
55
55
  unwrap,
56
56
  )
57
57
 
58
- __version__ = "0.91.16"
58
+ __version__ = "0.92.0"
59
59
 
60
60
  __all__ = [
61
61
  # clients + top-level functions
@@ -3108,7 +3108,7 @@ class InstagramNamespace:
3108
3108
  instagram.hashtag_top_posts; for older relevance-ranked results use
3109
3109
  instagram.search_hashtag.
3110
3110
 
3111
- Price: $0.0015 per request.
3111
+ Price: $0.0012 per request.
3112
3112
 
3113
3113
  Example:
3114
3114
  res = client.instagram.hashtag_recent_posts(hashtag="skincare")
@@ -4282,7 +4282,7 @@ class AsyncInstagramNamespace:
4282
4282
  instagram.hashtag_top_posts; for older relevance-ranked results use
4283
4283
  instagram.search_hashtag.
4284
4284
 
4285
- Price: $0.0015 per request.
4285
+ Price: $0.0012 per request.
4286
4286
 
4287
4287
  Example:
4288
4288
  res = client.instagram.hashtag_recent_posts(hashtag="skincare")
@@ -457,6 +457,8 @@ class LinkedinProfilePostsFullInput(TypedDict, total=False):
457
457
  """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."""
458
458
  contextCountry: NotRequired[Literal["any", "US", "GB", "DE", "FR"]]
459
459
  """Regional LinkedIn context used when retrieving posts."""
460
+ cursor: NotRequired[str]
461
+ """Pagination cursor from a previous response's nextCursor."""
460
462
  ignoreSources: NotRequired[list[str]]
461
463
  """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."""
462
464
  includeQuotePosts: NotRequired[bool]
@@ -464,7 +466,7 @@ class LinkedinProfilePostsFullInput(TypedDict, total=False):
464
466
  includeReposts: NotRequired[bool]
465
467
  """Whether to include reposts that share content without added commentary. Default: true."""
466
468
  limit: NotRequired[int]
467
- """Maximum number of posts to return (1-100, default 10). Range: 1 to 100. Default: 10."""
469
+ """Most posts to return (1-100, default 10). Ignored on sources that page: each call returns one full page of 50 posts; follow nextCursor for more. Sources that cannot page return up to `limit` posts in one call with no nextCursor. Range: 1 to 100. Default: 10."""
468
470
  postedLimit: NotRequired[
469
471
  Literal["any", "1h", "24h", "week", "month", "3months", "6months", "year"]
470
472
  ]
@@ -473,6 +475,8 @@ class LinkedinProfilePostsFullInput(TypedDict, total=False):
473
475
  """Only return posts published on or after this date or timestamp, using a JavaScript-compatible date-time string."""
474
476
  preferLatencyUnderMs: NotRequired[int]
475
477
  """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."""
478
+ requireFields: NotRequired[list[Literal["nextCursor"]]]
479
+ """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 `nextCursor`, 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."""
476
480
  source: NotRequired[list[str]]
477
481
  """Optional. Source ids to prefer, in order, taken from this endpoint's `lanes[].source.id` in /catalog or /apis. Omit it and the cheapest source serves, with automatic failover. Listed sources are tried first in the order given, then the others, unless `allowFallbacks` is false. A single source with `allowFallbacks` false is served only by that source at its price, quoted and charged exactly, with no failover. The price is that of the dearest source that may serve. An id that does not serve this endpoint is rejected as invalid input with no charge; a listed source that is not serving right now is refused with no charge, so omit `source` to be served by another. On a paginated walk, later pages must include the source that served page one, or omit `source`."""
478
482
  url: Required[str]
@@ -484,12 +488,16 @@ class LinkedinProfilePostsThinInput(TypedDict, total=False):
484
488
 
485
489
  allowFallbacks: NotRequired[bool]
486
490
  """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."""
491
+ cursor: NotRequired[str]
492
+ """Pagination cursor from a previous response's nextCursor."""
487
493
  ignoreSources: NotRequired[list[str]]
488
494
  """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."""
489
495
  limit: NotRequired[int]
490
- """Maximum number of posts to return (10-100, default 10). Range: 10 to 100. Default: 10."""
496
+ """Most posts to return (10-100, default 10). Ignored on sources that page: each call returns one full page of 50 posts; follow nextCursor for more. Sources that cannot page return up to `limit` posts in one call with no nextCursor. Range: 10 to 100. Default: 10."""
491
497
  preferLatencyUnderMs: NotRequired[int]
492
498
  """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."""
499
+ requireFields: NotRequired[list[Literal["nextCursor"]]]
500
+ """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 `nextCursor`, 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."""
493
501
  source: NotRequired[list[str]]
494
502
  """Optional. Source ids to prefer, in order, taken from this endpoint's `lanes[].source.id` in /catalog or /apis. Omit it and the cheapest source serves, with automatic failover. Listed sources are tried first in the order given, then the others, unless `allowFallbacks` is false. A single source with `allowFallbacks` false is served only by that source at its price, quoted and charged exactly, with no failover. The price is that of the dearest source that may serve. An id that does not serve this endpoint is rejected as invalid input with no charge; a listed source that is not serving right now is refused with no charge, so omit `source` to be served by another. On a paginated walk, later pages must include the source that served page one, or omit `source`."""
495
503
  url: Required[str]
@@ -2844,9 +2852,16 @@ class LinkedinProfileCommentsAuthor(BaseModel):
2844
2852
 
2845
2853
 
2846
2854
  class LinkedinProfilePostsFullData(BaseModel):
2855
+ model_config = ConfigDict(populate_by_name=True)
2856
+
2847
2857
  items: list[LinkedinProfilePostsFullItem] = Field(
2848
2858
  description="Recent enriched posts published by the profile. Populated whenever the provider has data for the entity."
2849
2859
  )
2860
+ next_cursor: str | None = Field(
2861
+ default=None,
2862
+ alias="nextCursor",
2863
+ description="Opaque cursor for the next page of posts, or null when there are no more. Pass it back as cursor to continue.",
2864
+ )
2850
2865
 
2851
2866
 
2852
2867
  class LinkedinProfilePostsFullItem(BaseModel):
@@ -3302,9 +3317,16 @@ class LinkedinProfilePostsFullSocialContent(BaseModel):
3302
3317
 
3303
3318
 
3304
3319
  class LinkedinProfilePostsThinData(BaseModel):
3320
+ model_config = ConfigDict(populate_by_name=True)
3321
+
3305
3322
  items: list[LinkedinProfilePostsThinItem] = Field(
3306
3323
  description="Recent posts published by the profile. Populated whenever the provider has data for the entity."
3307
3324
  )
3325
+ next_cursor: str | None = Field(
3326
+ default=None,
3327
+ alias="nextCursor",
3328
+ description="Opaque cursor for the next page of posts, or null when there are no more. Pass it back as cursor to continue.",
3329
+ )
3308
3330
 
3309
3331
 
3310
3332
  class LinkedinProfilePostsThinItem(BaseModel):
@@ -4790,6 +4812,29 @@ class LinkedinNamespace:
4790
4812
  )
4791
4813
  return RunResult[LinkedinProfilePostsFullData].model_validate(raw)
4792
4814
 
4815
+ def iter_profile_posts_full(
4816
+ self,
4817
+ *,
4818
+ options: RequestOptions | None = None,
4819
+ **input: Unpack[LinkedinProfilePostsFullInput],
4820
+ ) -> Paginator[LinkedinProfilePostsFullItem, LinkedinProfilePostsFullData]:
4821
+ """Iterate LinkedIn Profile Posts (full) results, following pagination cursors.
4822
+
4823
+ Yields validated `LinkedinProfilePostsFullItem` items from the `items` field of
4824
+ each page. Use `.pages()` on the returned paginator to walk whole
4825
+ `RunResult` pages.
4826
+ """
4827
+ return paginate(
4828
+ self._client,
4829
+ "linkedin.profile_posts_full",
4830
+ dict(input),
4831
+ "items",
4832
+ item_model=LinkedinProfilePostsFullItem,
4833
+ data_model=LinkedinProfilePostsFullData,
4834
+ bare=False,
4835
+ options=options,
4836
+ )
4837
+
4793
4838
  def profile_posts_thin(
4794
4839
  self,
4795
4840
  *,
@@ -4811,6 +4856,29 @@ class LinkedinNamespace:
4811
4856
  )
4812
4857
  return RunResult[LinkedinProfilePostsThinData].model_validate(raw)
4813
4858
 
4859
+ def iter_profile_posts_thin(
4860
+ self,
4861
+ *,
4862
+ options: RequestOptions | None = None,
4863
+ **input: Unpack[LinkedinProfilePostsThinInput],
4864
+ ) -> Paginator[LinkedinProfilePostsThinItem, LinkedinProfilePostsThinData]:
4865
+ """Iterate LinkedIn Profile Posts (basic) results, following pagination cursors.
4866
+
4867
+ Yields validated `LinkedinProfilePostsThinItem` items from the `items` field of
4868
+ each page. Use `.pages()` on the returned paginator to walk whole
4869
+ `RunResult` pages.
4870
+ """
4871
+ return paginate(
4872
+ self._client,
4873
+ "linkedin.profile_posts_thin",
4874
+ dict(input),
4875
+ "items",
4876
+ item_model=LinkedinProfilePostsThinItem,
4877
+ data_model=LinkedinProfilePostsThinData,
4878
+ bare=False,
4879
+ options=options,
4880
+ )
4881
+
4814
4882
  def profile_reactions(
4815
4883
  self,
4816
4884
  *,
@@ -5511,6 +5579,29 @@ class AsyncLinkedinNamespace:
5511
5579
  )
5512
5580
  return RunResult[LinkedinProfilePostsFullData].model_validate(raw)
5513
5581
 
5582
+ def iter_profile_posts_full(
5583
+ self,
5584
+ *,
5585
+ options: RequestOptions | None = None,
5586
+ **input: Unpack[LinkedinProfilePostsFullInput],
5587
+ ) -> AsyncPaginator[LinkedinProfilePostsFullItem, LinkedinProfilePostsFullData]:
5588
+ """Iterate LinkedIn Profile Posts (full) results, following pagination cursors.
5589
+
5590
+ Yields validated `LinkedinProfilePostsFullItem` items from the `items` field of
5591
+ each page. Use `.pages()` on the returned paginator to walk whole
5592
+ `RunResult` pages.
5593
+ """
5594
+ return apaginate(
5595
+ self._client,
5596
+ "linkedin.profile_posts_full",
5597
+ dict(input),
5598
+ "items",
5599
+ item_model=LinkedinProfilePostsFullItem,
5600
+ data_model=LinkedinProfilePostsFullData,
5601
+ bare=False,
5602
+ options=options,
5603
+ )
5604
+
5514
5605
  async def profile_posts_thin(
5515
5606
  self,
5516
5607
  *,
@@ -5532,6 +5623,29 @@ class AsyncLinkedinNamespace:
5532
5623
  )
5533
5624
  return RunResult[LinkedinProfilePostsThinData].model_validate(raw)
5534
5625
 
5626
+ def iter_profile_posts_thin(
5627
+ self,
5628
+ *,
5629
+ options: RequestOptions | None = None,
5630
+ **input: Unpack[LinkedinProfilePostsThinInput],
5631
+ ) -> AsyncPaginator[LinkedinProfilePostsThinItem, LinkedinProfilePostsThinData]:
5632
+ """Iterate LinkedIn Profile Posts (basic) results, following pagination cursors.
5633
+
5634
+ Yields validated `LinkedinProfilePostsThinItem` items from the `items` field of
5635
+ each page. Use `.pages()` on the returned paginator to walk whole
5636
+ `RunResult` pages.
5637
+ """
5638
+ return apaginate(
5639
+ self._client,
5640
+ "linkedin.profile_posts_thin",
5641
+ dict(input),
5642
+ "items",
5643
+ item_model=LinkedinProfilePostsThinItem,
5644
+ data_model=LinkedinProfilePostsThinData,
5645
+ bare=False,
5646
+ options=options,
5647
+ )
5648
+
5535
5649
  async def profile_reactions(
5536
5650
  self,
5537
5651
  *,
@@ -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.0007 per request.
1799
+ Price: $0.00075 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.0007 per request.
2339
+ Price: $0.00075 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