getanyapi 0.64.0__tar.gz → 0.66.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 (106) hide show
  1. {getanyapi-0.64.0 → getanyapi-0.66.0}/PKG-INFO +1 -1
  2. {getanyapi-0.64.0 → getanyapi-0.66.0}/pyproject.toml +1 -1
  3. {getanyapi-0.64.0 → getanyapi-0.66.0}/src/getanyapi/__init__.py +1 -1
  4. {getanyapi-0.64.0 → getanyapi-0.66.0}/src/getanyapi/platforms/facebook.py +63 -5
  5. {getanyapi-0.64.0 → getanyapi-0.66.0}/src/getanyapi/platforms/linkedin.py +2 -2
  6. {getanyapi-0.64.0 → getanyapi-0.66.0}/src/getanyapi/platforms/reddit.py +9 -4
  7. {getanyapi-0.64.0 → getanyapi-0.66.0}/.gitignore +0 -0
  8. {getanyapi-0.64.0 → getanyapi-0.66.0}/README.md +0 -0
  9. {getanyapi-0.64.0 → getanyapi-0.66.0}/src/getanyapi/_account.py +0 -0
  10. {getanyapi-0.64.0 → getanyapi-0.66.0}/src/getanyapi/_async_client.py +0 -0
  11. {getanyapi-0.64.0 → getanyapi-0.66.0}/src/getanyapi/_client.py +0 -0
  12. {getanyapi-0.64.0 → getanyapi-0.66.0}/src/getanyapi/_errors.py +0 -0
  13. {getanyapi-0.64.0 → getanyapi-0.66.0}/src/getanyapi/_idempotency.py +0 -0
  14. {getanyapi-0.64.0 → getanyapi-0.66.0}/src/getanyapi/_pagination.py +0 -0
  15. {getanyapi-0.64.0 → getanyapi-0.66.0}/src/getanyapi/_transport.py +0 -0
  16. {getanyapi-0.64.0 → getanyapi-0.66.0}/src/getanyapi/discovery_types.py +0 -0
  17. {getanyapi-0.64.0 → getanyapi-0.66.0}/src/getanyapi/platforms/__init__.py +0 -0
  18. {getanyapi-0.64.0 → getanyapi-0.66.0}/src/getanyapi/platforms/ahrefs.py +0 -0
  19. {getanyapi-0.64.0 → getanyapi-0.66.0}/src/getanyapi/platforms/airbnb.py +0 -0
  20. {getanyapi-0.64.0 → getanyapi-0.66.0}/src/getanyapi/platforms/alibaba.py +0 -0
  21. {getanyapi-0.64.0 → getanyapi-0.66.0}/src/getanyapi/platforms/amazon.py +0 -0
  22. {getanyapi-0.64.0 → getanyapi-0.66.0}/src/getanyapi/platforms/apollo.py +0 -0
  23. {getanyapi-0.64.0 → getanyapi-0.66.0}/src/getanyapi/platforms/appstore.py +0 -0
  24. {getanyapi-0.64.0 → getanyapi-0.66.0}/src/getanyapi/platforms/bluesky.py +0 -0
  25. {getanyapi-0.64.0 → getanyapi-0.66.0}/src/getanyapi/platforms/booking.py +0 -0
  26. {getanyapi-0.64.0 → getanyapi-0.66.0}/src/getanyapi/platforms/capterra.py +0 -0
  27. {getanyapi-0.64.0 → getanyapi-0.66.0}/src/getanyapi/platforms/chatgpt.py +0 -0
  28. {getanyapi-0.64.0 → getanyapi-0.66.0}/src/getanyapi/platforms/coinmarketcap.py +0 -0
  29. {getanyapi-0.64.0 → getanyapi-0.66.0}/src/getanyapi/platforms/company.py +0 -0
  30. {getanyapi-0.64.0 → getanyapi-0.66.0}/src/getanyapi/platforms/company_enrichment.py +0 -0
  31. {getanyapi-0.64.0 → getanyapi-0.66.0}/src/getanyapi/platforms/company_identify.py +0 -0
  32. {getanyapi-0.64.0 → getanyapi-0.66.0}/src/getanyapi/platforms/company_search.py +0 -0
  33. {getanyapi-0.64.0 → getanyapi-0.66.0}/src/getanyapi/platforms/congress.py +0 -0
  34. {getanyapi-0.64.0 → getanyapi-0.66.0}/src/getanyapi/platforms/contact_enrichment.py +0 -0
  35. {getanyapi-0.64.0 → getanyapi-0.66.0}/src/getanyapi/platforms/douyin.py +0 -0
  36. {getanyapi-0.64.0 → getanyapi-0.66.0}/src/getanyapi/platforms/ebay.py +0 -0
  37. {getanyapi-0.64.0 → getanyapi-0.66.0}/src/getanyapi/platforms/email.py +0 -0
  38. {getanyapi-0.64.0 → getanyapi-0.66.0}/src/getanyapi/platforms/email_finding.py +0 -0
  39. {getanyapi-0.64.0 → getanyapi-0.66.0}/src/getanyapi/platforms/email_verification.py +0 -0
  40. {getanyapi-0.64.0 → getanyapi-0.66.0}/src/getanyapi/platforms/fiverr.py +0 -0
  41. {getanyapi-0.64.0 → getanyapi-0.66.0}/src/getanyapi/platforms/g2.py +0 -0
  42. {getanyapi-0.64.0 → getanyapi-0.66.0}/src/getanyapi/platforms/gemini.py +0 -0
  43. {getanyapi-0.64.0 → getanyapi-0.66.0}/src/getanyapi/platforms/github.py +0 -0
  44. {getanyapi-0.64.0 → getanyapi-0.66.0}/src/getanyapi/platforms/glassdoor.py +0 -0
  45. {getanyapi-0.64.0 → getanyapi-0.66.0}/src/getanyapi/platforms/google.py +0 -0
  46. {getanyapi-0.64.0 → getanyapi-0.66.0}/src/getanyapi/platforms/google_ads.py +0 -0
  47. {getanyapi-0.64.0 → getanyapi-0.66.0}/src/getanyapi/platforms/google_finance.py +0 -0
  48. {getanyapi-0.64.0 → getanyapi-0.66.0}/src/getanyapi/platforms/google_shopping.py +0 -0
  49. {getanyapi-0.64.0 → getanyapi-0.66.0}/src/getanyapi/platforms/hackernews.py +0 -0
  50. {getanyapi-0.64.0 → getanyapi-0.66.0}/src/getanyapi/platforms/indeed.py +0 -0
  51. {getanyapi-0.64.0 → getanyapi-0.66.0}/src/getanyapi/platforms/instagram.py +0 -0
  52. {getanyapi-0.64.0 → getanyapi-0.66.0}/src/getanyapi/platforms/job_search.py +0 -0
  53. {getanyapi-0.64.0 → getanyapi-0.66.0}/src/getanyapi/platforms/maps.py +0 -0
  54. {getanyapi-0.64.0 → getanyapi-0.66.0}/src/getanyapi/platforms/mobile_phone.py +0 -0
  55. {getanyapi-0.64.0 → getanyapi-0.66.0}/src/getanyapi/platforms/naver.py +0 -0
  56. {getanyapi-0.64.0 → getanyapi-0.66.0}/src/getanyapi/platforms/nextdoor.py +0 -0
  57. {getanyapi-0.64.0 → getanyapi-0.66.0}/src/getanyapi/platforms/people_search.py +0 -0
  58. {getanyapi-0.64.0 → getanyapi-0.66.0}/src/getanyapi/platforms/perplexity.py +0 -0
  59. {getanyapi-0.64.0 → getanyapi-0.66.0}/src/getanyapi/platforms/person.py +0 -0
  60. {getanyapi-0.64.0 → getanyapi-0.66.0}/src/getanyapi/platforms/person_enrichment.py +0 -0
  61. {getanyapi-0.64.0 → getanyapi-0.66.0}/src/getanyapi/platforms/pinterest.py +0 -0
  62. {getanyapi-0.64.0 → getanyapi-0.66.0}/src/getanyapi/platforms/playstore.py +0 -0
  63. {getanyapi-0.64.0 → getanyapi-0.66.0}/src/getanyapi/platforms/polymarket.py +0 -0
  64. {getanyapi-0.64.0 → getanyapi-0.66.0}/src/getanyapi/platforms/property_records.py +0 -0
  65. {getanyapi-0.64.0 → getanyapi-0.66.0}/src/getanyapi/platforms/realtor.py +0 -0
  66. {getanyapi-0.64.0 → getanyapi-0.66.0}/src/getanyapi/platforms/redfin.py +0 -0
  67. {getanyapi-0.64.0 → getanyapi-0.66.0}/src/getanyapi/platforms/rednote.py +0 -0
  68. {getanyapi-0.64.0 → getanyapi-0.66.0}/src/getanyapi/platforms/sec.py +0 -0
  69. {getanyapi-0.64.0 → getanyapi-0.66.0}/src/getanyapi/platforms/semrush.py +0 -0
  70. {getanyapi-0.64.0 → getanyapi-0.66.0}/src/getanyapi/platforms/seo.py +0 -0
  71. {getanyapi-0.64.0 → getanyapi-0.66.0}/src/getanyapi/platforms/similarweb.py +0 -0
  72. {getanyapi-0.64.0 → getanyapi-0.66.0}/src/getanyapi/platforms/snapchat.py +0 -0
  73. {getanyapi-0.64.0 → getanyapi-0.66.0}/src/getanyapi/platforms/social.py +0 -0
  74. {getanyapi-0.64.0 → getanyapi-0.66.0}/src/getanyapi/platforms/spotify.py +0 -0
  75. {getanyapi-0.64.0 → getanyapi-0.66.0}/src/getanyapi/platforms/substack.py +0 -0
  76. {getanyapi-0.64.0 → getanyapi-0.66.0}/src/getanyapi/platforms/technographics.py +0 -0
  77. {getanyapi-0.64.0 → getanyapi-0.66.0}/src/getanyapi/platforms/threads.py +0 -0
  78. {getanyapi-0.64.0 → getanyapi-0.66.0}/src/getanyapi/platforms/tiktok.py +0 -0
  79. {getanyapi-0.64.0 → getanyapi-0.66.0}/src/getanyapi/platforms/tiktok_shop.py +0 -0
  80. {getanyapi-0.64.0 → getanyapi-0.66.0}/src/getanyapi/platforms/tripadvisor.py +0 -0
  81. {getanyapi-0.64.0 → getanyapi-0.66.0}/src/getanyapi/platforms/trustpilot.py +0 -0
  82. {getanyapi-0.64.0 → getanyapi-0.66.0}/src/getanyapi/platforms/truthsocial.py +0 -0
  83. {getanyapi-0.64.0 → getanyapi-0.66.0}/src/getanyapi/platforms/twitter.py +0 -0
  84. {getanyapi-0.64.0 → getanyapi-0.66.0}/src/getanyapi/platforms/upwork.py +0 -0
  85. {getanyapi-0.64.0 → getanyapi-0.66.0}/src/getanyapi/platforms/walmart.py +0 -0
  86. {getanyapi-0.64.0 → getanyapi-0.66.0}/src/getanyapi/platforms/web.py +0 -0
  87. {getanyapi-0.64.0 → getanyapi-0.66.0}/src/getanyapi/platforms/weibo.py +0 -0
  88. {getanyapi-0.64.0 → getanyapi-0.66.0}/src/getanyapi/platforms/yahoo_finance.py +0 -0
  89. {getanyapi-0.64.0 → getanyapi-0.66.0}/src/getanyapi/platforms/yelp.py +0 -0
  90. {getanyapi-0.64.0 → getanyapi-0.66.0}/src/getanyapi/platforms/youtube.py +0 -0
  91. {getanyapi-0.64.0 → getanyapi-0.66.0}/src/getanyapi/platforms/zhihu.py +0 -0
  92. {getanyapi-0.64.0 → getanyapi-0.66.0}/src/getanyapi/platforms/zillow.py +0 -0
  93. {getanyapi-0.64.0 → getanyapi-0.66.0}/src/getanyapi/py.typed +0 -0
  94. {getanyapi-0.64.0 → getanyapi-0.66.0}/src/getanyapi/types.py +0 -0
  95. {getanyapi-0.64.0 → getanyapi-0.66.0}/tests/conftest.py +0 -0
  96. {getanyapi-0.64.0 → getanyapi-0.66.0}/tests/test_account.py +0 -0
  97. {getanyapi-0.64.0 → getanyapi-0.66.0}/tests/test_client.py +0 -0
  98. {getanyapi-0.64.0 → getanyapi-0.66.0}/tests/test_durable_requests.py +0 -0
  99. {getanyapi-0.64.0 → getanyapi-0.66.0}/tests/test_envelope.py +0 -0
  100. {getanyapi-0.64.0 → getanyapi-0.66.0}/tests/test_errors.py +0 -0
  101. {getanyapi-0.64.0 → getanyapi-0.66.0}/tests/test_fixture_roundtrip.py +0 -0
  102. {getanyapi-0.64.0 → getanyapi-0.66.0}/tests/test_fixture_sweep.py +0 -0
  103. {getanyapi-0.64.0 → getanyapi-0.66.0}/tests/test_not_found_reason.py +0 -0
  104. {getanyapi-0.64.0 → getanyapi-0.66.0}/tests/test_pagination.py +0 -0
  105. {getanyapi-0.64.0 → getanyapi-0.66.0}/tests/test_transport.py +0 -0
  106. {getanyapi-0.64.0 → getanyapi-0.66.0}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: getanyapi
3
- Version: 0.64.0
3
+ Version: 0.66.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.64.0"
7
+ version = "0.66.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.64.0"
58
+ __version__ = "0.66.0"
59
59
 
60
60
  __all__ = [
61
61
  # clients + top-level functions
@@ -93,6 +93,29 @@ class FacebookAdsSearchInput(TypedDict, total=False):
93
93
  """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."""
94
94
  query: Required[str]
95
95
  """Keyword to search the Meta Ad Library for (e.g. "protein powder")."""
96
+ requireFields: NotRequired[
97
+ list[
98
+ Literal[
99
+ "active",
100
+ "adCount",
101
+ "ads",
102
+ "caption",
103
+ "categories",
104
+ "endDate",
105
+ "isReshared",
106
+ "linkDescription",
107
+ "media",
108
+ "nextCursor",
109
+ "pageCategories",
110
+ "pageDeleted",
111
+ "pageLikes",
112
+ "pageProfilePicture",
113
+ "pageUrl",
114
+ "totalResults",
115
+ ]
116
+ ]
117
+ ]
118
+ """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 `totalResults` or `pageLikes`, 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 an ad that genuinely lacks it. Naming a combination that no single source returns together is refused as invalid input, with no charge."""
96
119
  searchType: NotRequired[Literal["keyword_unordered", "keyword_exact_phrase"]]
97
120
  """Match mode for the query: loose keyword match (keyword_unordered, the default) or exact phrase (keyword_exact_phrase)."""
98
121
  sortBy: NotRequired[Literal["impressions", "recent"]]
@@ -430,6 +453,21 @@ class FacebookPostCommentsInput(TypedDict, total=False):
430
453
  """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."""
431
454
  preferLatencyUnderMs: NotRequired[int]
432
455
  """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."""
456
+ requireFields: NotRequired[
457
+ list[
458
+ Literal[
459
+ "authorId",
460
+ "authorImage",
461
+ "expansionToken",
462
+ "feedbackId",
463
+ "hasNextPage",
464
+ "nextCursor",
465
+ "reactions",
466
+ "replies",
467
+ ]
468
+ ]
469
+ ]
470
+ """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 `feedbackId` or `hasNextPage`, 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 comment that genuinely lacks it. Naming a combination that no single source returns together is refused as invalid input, with no charge."""
433
471
  source: NotRequired[list[str]]
434
472
  """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`."""
435
473
  url: NotRequired[str]
@@ -515,6 +553,21 @@ class FacebookProfileReelsInput(TypedDict, total=False):
515
553
  """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."""
516
554
  preferLatencyUnderMs: NotRequired[int]
517
555
  """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."""
556
+ requireFields: NotRequired[
557
+ list[
558
+ Literal[
559
+ "authorId",
560
+ "authorImage",
561
+ "authorName",
562
+ "authorVerified",
563
+ "durationSeconds",
564
+ "feedbackId",
565
+ "nextCursor",
566
+ "views",
567
+ ]
568
+ ]
569
+ ]
570
+ """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 `feedbackId` or `authorVerified`, 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 reel that genuinely lacks it. Naming a combination that no single source returns together is refused as invalid input, with no charge."""
518
571
  source: NotRequired[list[str]]
519
572
  """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`."""
520
573
  url: Required[str]
@@ -565,7 +618,7 @@ class FacebookSearchPostsInput(TypedDict, total=False):
565
618
  ignoreSources: NotRequired[list[str]]
566
619
  """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."""
567
620
  limit: NotRequired[int]
568
- """Maximum number of results to return (1-20, default 20). You are billed per result returned, so a lower limit costs less. Range: 1 to 20."""
621
+ """Maximum number of results to return (1-20, default 20). Range: 1 to 20."""
569
622
  location: NotRequired[str]
570
623
  """Optional location to narrow results; include both city and country for best matches (e.g. 'Paris, France')."""
571
624
  preferLatencyUnderMs: NotRequired[int]
@@ -906,7 +959,10 @@ class FacebookAdsSearchData(BaseModel):
906
959
  alias="nextCursor",
907
960
  description="Opaque cursor for the next page of ads, or null when this lane has no more. Pass it back as cursor to continue.",
908
961
  )
909
- total_results: int = Field(alias="totalResults")
962
+ total_results: int | None = Field(
963
+ alias="totalResults",
964
+ description="Total number of ads matching the search. Null when the source cannot report an exact count.",
965
+ )
910
966
 
911
967
 
912
968
  class FacebookAdsSearchAd(BaseModel):
@@ -2006,7 +2062,9 @@ class FacebookPostData(BaseModel):
2006
2062
  alias="videoId",
2007
2063
  description="Facebook video id of the post's reel or video, the id that appears in its /reel/<id> URL. Null when the post carries no video or this lane cannot read it.",
2008
2064
  )
2009
- views: int
2065
+ views: int | None = Field(
2066
+ description="Number of views on the post's video. Null when the source cannot report an exact count, for example when it gives only a rounded figure such as 14K."
2067
+ )
2010
2068
 
2011
2069
 
2012
2070
  class FacebookPostCommentsData(BaseModel):
@@ -3377,7 +3435,7 @@ class FacebookNamespace:
3377
3435
  Search public Facebook posts by keyword, optionally filtered by location,
3378
3436
  and get structured post records (text, author, engagement).
3379
3437
 
3380
- Price: $0.00006 per request plus $0.0033 per result (maximum $0.0661).
3438
+ Price: $0.03 per request.
3381
3439
 
3382
3440
  Example:
3383
3441
  res = client.facebook.search_posts(limit=3, query="nike")
@@ -4232,7 +4290,7 @@ class AsyncFacebookNamespace:
4232
4290
  Search public Facebook posts by keyword, optionally filtered by location,
4233
4291
  and get structured post records (text, author, engagement).
4234
4292
 
4235
- Price: $0.00006 per request plus $0.0033 per result (maximum $0.0661).
4293
+ Price: $0.03 per request.
4236
4294
 
4237
4295
  Example:
4238
4296
  res = client.facebook.search_posts(limit=3, query="nike")
@@ -4175,7 +4175,7 @@ class LinkedinNamespace:
4175
4175
  List the employees of a LinkedIn company by name or company URL, with
4176
4176
  optional job-title filtering.
4177
4177
 
4178
- Price: $0.0032 per request plus $0.0048 per result (maximum $0.0512).
4178
+ Price: $0 per request plus $0.011 per result (maximum $0.11).
4179
4179
 
4180
4180
  Example:
4181
4181
  res = client.linkedin.company_employees(company="stripe", limit=3)
@@ -4867,7 +4867,7 @@ class AsyncLinkedinNamespace:
4867
4867
  List the employees of a LinkedIn company by name or company URL, with
4868
4868
  optional job-title filtering.
4869
4869
 
4870
- Price: $0.0032 per request plus $0.0048 per result (maximum $0.0512).
4870
+ Price: $0 per request plus $0.011 per result (maximum $0.11).
4871
4871
 
4872
4872
  Example:
4873
4873
  res = client.linkedin.company_employees(company="stripe", limit=3)
@@ -457,6 +457,11 @@ class RedditPostCommentsComment(BaseModel):
457
457
  id: str = Field(
458
458
  description="Reddit comment ID (base-36, without the t1_ prefix). Populated whenever the provider has data for the entity."
459
459
  )
460
+ parent_id: str | None = Field(
461
+ default=None,
462
+ alias="parentId",
463
+ description="ID of the comment this one replies to (base-36, without the t1_ prefix). Empty for a top-level comment that replies to the post itself.",
464
+ )
460
465
  score: int | None = Field(
461
466
  default=None,
462
467
  description="Net score (upvotes minus downvotes) on the comment at fetch time.",
@@ -1098,8 +1103,8 @@ class RedditNamespace:
1098
1103
  ) -> RunResult[RedditPostCommentsData]:
1099
1104
  """Reddit Post Comments
1100
1105
 
1101
- List the top-level comments on a Reddit post by URL (author, body, score,
1102
- timestamp).
1106
+ List the comments on a Reddit post by URL (author, body, score, timestamp,
1107
+ parent comment). Replies carry the parentId of the comment they answer.
1103
1108
 
1104
1109
  Price: $0.0006 per request.
1105
1110
 
@@ -1493,8 +1498,8 @@ class AsyncRedditNamespace:
1493
1498
  ) -> RunResult[RedditPostCommentsData]:
1494
1499
  """Reddit Post Comments
1495
1500
 
1496
- List the top-level comments on a Reddit post by URL (author, body, score,
1497
- timestamp).
1501
+ List the comments on a Reddit post by URL (author, body, score, timestamp,
1502
+ parent comment). Replies carry the parentId of the comment they answer.
1498
1503
 
1499
1504
  Price: $0.0006 per request.
1500
1505
 
File without changes
File without changes
File without changes
File without changes