getanyapi 0.44.0__tar.gz → 0.45.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 (102) hide show
  1. {getanyapi-0.44.0 → getanyapi-0.45.1}/PKG-INFO +1 -1
  2. {getanyapi-0.44.0 → getanyapi-0.45.1}/pyproject.toml +1 -1
  3. {getanyapi-0.44.0 → getanyapi-0.45.1}/src/getanyapi/__init__.py +1 -1
  4. {getanyapi-0.44.0 → getanyapi-0.45.1}/src/getanyapi/platforms/google.py +1 -5
  5. {getanyapi-0.44.0 → getanyapi-0.45.1}/src/getanyapi/platforms/instagram.py +53 -29
  6. {getanyapi-0.44.0 → getanyapi-0.45.1}/src/getanyapi/platforms/youtube.py +2 -2
  7. {getanyapi-0.44.0 → getanyapi-0.45.1}/.gitignore +0 -0
  8. {getanyapi-0.44.0 → getanyapi-0.45.1}/README.md +0 -0
  9. {getanyapi-0.44.0 → getanyapi-0.45.1}/src/getanyapi/_account.py +0 -0
  10. {getanyapi-0.44.0 → getanyapi-0.45.1}/src/getanyapi/_async_client.py +0 -0
  11. {getanyapi-0.44.0 → getanyapi-0.45.1}/src/getanyapi/_client.py +0 -0
  12. {getanyapi-0.44.0 → getanyapi-0.45.1}/src/getanyapi/_errors.py +0 -0
  13. {getanyapi-0.44.0 → getanyapi-0.45.1}/src/getanyapi/_idempotency.py +0 -0
  14. {getanyapi-0.44.0 → getanyapi-0.45.1}/src/getanyapi/_pagination.py +0 -0
  15. {getanyapi-0.44.0 → getanyapi-0.45.1}/src/getanyapi/_transport.py +0 -0
  16. {getanyapi-0.44.0 → getanyapi-0.45.1}/src/getanyapi/discovery_types.py +0 -0
  17. {getanyapi-0.44.0 → getanyapi-0.45.1}/src/getanyapi/platforms/__init__.py +0 -0
  18. {getanyapi-0.44.0 → getanyapi-0.45.1}/src/getanyapi/platforms/ahrefs.py +0 -0
  19. {getanyapi-0.44.0 → getanyapi-0.45.1}/src/getanyapi/platforms/airbnb.py +0 -0
  20. {getanyapi-0.44.0 → getanyapi-0.45.1}/src/getanyapi/platforms/alibaba.py +0 -0
  21. {getanyapi-0.44.0 → getanyapi-0.45.1}/src/getanyapi/platforms/amazon.py +0 -0
  22. {getanyapi-0.44.0 → getanyapi-0.45.1}/src/getanyapi/platforms/apollo.py +0 -0
  23. {getanyapi-0.44.0 → getanyapi-0.45.1}/src/getanyapi/platforms/appstore.py +0 -0
  24. {getanyapi-0.44.0 → getanyapi-0.45.1}/src/getanyapi/platforms/bluesky.py +0 -0
  25. {getanyapi-0.44.0 → getanyapi-0.45.1}/src/getanyapi/platforms/booking.py +0 -0
  26. {getanyapi-0.44.0 → getanyapi-0.45.1}/src/getanyapi/platforms/capterra.py +0 -0
  27. {getanyapi-0.44.0 → getanyapi-0.45.1}/src/getanyapi/platforms/chatgpt.py +0 -0
  28. {getanyapi-0.44.0 → getanyapi-0.45.1}/src/getanyapi/platforms/coinmarketcap.py +0 -0
  29. {getanyapi-0.44.0 → getanyapi-0.45.1}/src/getanyapi/platforms/company.py +0 -0
  30. {getanyapi-0.44.0 → getanyapi-0.45.1}/src/getanyapi/platforms/company_enrichment.py +0 -0
  31. {getanyapi-0.44.0 → getanyapi-0.45.1}/src/getanyapi/platforms/company_search.py +0 -0
  32. {getanyapi-0.44.0 → getanyapi-0.45.1}/src/getanyapi/platforms/congress.py +0 -0
  33. {getanyapi-0.44.0 → getanyapi-0.45.1}/src/getanyapi/platforms/dexscreener.py +0 -0
  34. {getanyapi-0.44.0 → getanyapi-0.45.1}/src/getanyapi/platforms/douyin.py +0 -0
  35. {getanyapi-0.44.0 → getanyapi-0.45.1}/src/getanyapi/platforms/ebay.py +0 -0
  36. {getanyapi-0.44.0 → getanyapi-0.45.1}/src/getanyapi/platforms/email.py +0 -0
  37. {getanyapi-0.44.0 → getanyapi-0.45.1}/src/getanyapi/platforms/email_finding.py +0 -0
  38. {getanyapi-0.44.0 → getanyapi-0.45.1}/src/getanyapi/platforms/email_verification.py +0 -0
  39. {getanyapi-0.44.0 → getanyapi-0.45.1}/src/getanyapi/platforms/facebook.py +0 -0
  40. {getanyapi-0.44.0 → getanyapi-0.45.1}/src/getanyapi/platforms/fiverr.py +0 -0
  41. {getanyapi-0.44.0 → getanyapi-0.45.1}/src/getanyapi/platforms/g2.py +0 -0
  42. {getanyapi-0.44.0 → getanyapi-0.45.1}/src/getanyapi/platforms/gemini.py +0 -0
  43. {getanyapi-0.44.0 → getanyapi-0.45.1}/src/getanyapi/platforms/github.py +0 -0
  44. {getanyapi-0.44.0 → getanyapi-0.45.1}/src/getanyapi/platforms/glassdoor.py +0 -0
  45. {getanyapi-0.44.0 → getanyapi-0.45.1}/src/getanyapi/platforms/google_ads.py +0 -0
  46. {getanyapi-0.44.0 → getanyapi-0.45.1}/src/getanyapi/platforms/google_finance.py +0 -0
  47. {getanyapi-0.44.0 → getanyapi-0.45.1}/src/getanyapi/platforms/google_shopping.py +0 -0
  48. {getanyapi-0.44.0 → getanyapi-0.45.1}/src/getanyapi/platforms/hackernews.py +0 -0
  49. {getanyapi-0.44.0 → getanyapi-0.45.1}/src/getanyapi/platforms/indeed.py +0 -0
  50. {getanyapi-0.44.0 → getanyapi-0.45.1}/src/getanyapi/platforms/job_search.py +0 -0
  51. {getanyapi-0.44.0 → getanyapi-0.45.1}/src/getanyapi/platforms/linkedin.py +0 -0
  52. {getanyapi-0.44.0 → getanyapi-0.45.1}/src/getanyapi/platforms/maps.py +0 -0
  53. {getanyapi-0.44.0 → getanyapi-0.45.1}/src/getanyapi/platforms/mobile_phone.py +0 -0
  54. {getanyapi-0.44.0 → getanyapi-0.45.1}/src/getanyapi/platforms/naver.py +0 -0
  55. {getanyapi-0.44.0 → getanyapi-0.45.1}/src/getanyapi/platforms/nextdoor.py +0 -0
  56. {getanyapi-0.44.0 → getanyapi-0.45.1}/src/getanyapi/platforms/people_search.py +0 -0
  57. {getanyapi-0.44.0 → getanyapi-0.45.1}/src/getanyapi/platforms/perplexity.py +0 -0
  58. {getanyapi-0.44.0 → getanyapi-0.45.1}/src/getanyapi/platforms/person.py +0 -0
  59. {getanyapi-0.44.0 → getanyapi-0.45.1}/src/getanyapi/platforms/person_enrichment.py +0 -0
  60. {getanyapi-0.44.0 → getanyapi-0.45.1}/src/getanyapi/platforms/pinterest.py +0 -0
  61. {getanyapi-0.44.0 → getanyapi-0.45.1}/src/getanyapi/platforms/playstore.py +0 -0
  62. {getanyapi-0.44.0 → getanyapi-0.45.1}/src/getanyapi/platforms/polymarket.py +0 -0
  63. {getanyapi-0.44.0 → getanyapi-0.45.1}/src/getanyapi/platforms/realtor.py +0 -0
  64. {getanyapi-0.44.0 → getanyapi-0.45.1}/src/getanyapi/platforms/reddit.py +0 -0
  65. {getanyapi-0.44.0 → getanyapi-0.45.1}/src/getanyapi/platforms/redfin.py +0 -0
  66. {getanyapi-0.44.0 → getanyapi-0.45.1}/src/getanyapi/platforms/rednote.py +0 -0
  67. {getanyapi-0.44.0 → getanyapi-0.45.1}/src/getanyapi/platforms/sec.py +0 -0
  68. {getanyapi-0.44.0 → getanyapi-0.45.1}/src/getanyapi/platforms/semrush.py +0 -0
  69. {getanyapi-0.44.0 → getanyapi-0.45.1}/src/getanyapi/platforms/seo.py +0 -0
  70. {getanyapi-0.44.0 → getanyapi-0.45.1}/src/getanyapi/platforms/snapchat.py +0 -0
  71. {getanyapi-0.44.0 → getanyapi-0.45.1}/src/getanyapi/platforms/social.py +0 -0
  72. {getanyapi-0.44.0 → getanyapi-0.45.1}/src/getanyapi/platforms/spotify.py +0 -0
  73. {getanyapi-0.44.0 → getanyapi-0.45.1}/src/getanyapi/platforms/substack.py +0 -0
  74. {getanyapi-0.44.0 → getanyapi-0.45.1}/src/getanyapi/platforms/technographics.py +0 -0
  75. {getanyapi-0.44.0 → getanyapi-0.45.1}/src/getanyapi/platforms/threads.py +0 -0
  76. {getanyapi-0.44.0 → getanyapi-0.45.1}/src/getanyapi/platforms/tiktok.py +0 -0
  77. {getanyapi-0.44.0 → getanyapi-0.45.1}/src/getanyapi/platforms/tiktok_shop.py +0 -0
  78. {getanyapi-0.44.0 → getanyapi-0.45.1}/src/getanyapi/platforms/tripadvisor.py +0 -0
  79. {getanyapi-0.44.0 → getanyapi-0.45.1}/src/getanyapi/platforms/trustpilot.py +0 -0
  80. {getanyapi-0.44.0 → getanyapi-0.45.1}/src/getanyapi/platforms/truthsocial.py +0 -0
  81. {getanyapi-0.44.0 → getanyapi-0.45.1}/src/getanyapi/platforms/twitter.py +0 -0
  82. {getanyapi-0.44.0 → getanyapi-0.45.1}/src/getanyapi/platforms/upwork.py +0 -0
  83. {getanyapi-0.44.0 → getanyapi-0.45.1}/src/getanyapi/platforms/walmart.py +0 -0
  84. {getanyapi-0.44.0 → getanyapi-0.45.1}/src/getanyapi/platforms/web.py +0 -0
  85. {getanyapi-0.44.0 → getanyapi-0.45.1}/src/getanyapi/platforms/weibo.py +0 -0
  86. {getanyapi-0.44.0 → getanyapi-0.45.1}/src/getanyapi/platforms/yahoo_finance.py +0 -0
  87. {getanyapi-0.44.0 → getanyapi-0.45.1}/src/getanyapi/platforms/yelp.py +0 -0
  88. {getanyapi-0.44.0 → getanyapi-0.45.1}/src/getanyapi/platforms/zhihu.py +0 -0
  89. {getanyapi-0.44.0 → getanyapi-0.45.1}/src/getanyapi/platforms/zillow.py +0 -0
  90. {getanyapi-0.44.0 → getanyapi-0.45.1}/src/getanyapi/py.typed +0 -0
  91. {getanyapi-0.44.0 → getanyapi-0.45.1}/src/getanyapi/types.py +0 -0
  92. {getanyapi-0.44.0 → getanyapi-0.45.1}/tests/conftest.py +0 -0
  93. {getanyapi-0.44.0 → getanyapi-0.45.1}/tests/test_account.py +0 -0
  94. {getanyapi-0.44.0 → getanyapi-0.45.1}/tests/test_client.py +0 -0
  95. {getanyapi-0.44.0 → getanyapi-0.45.1}/tests/test_durable_requests.py +0 -0
  96. {getanyapi-0.44.0 → getanyapi-0.45.1}/tests/test_envelope.py +0 -0
  97. {getanyapi-0.44.0 → getanyapi-0.45.1}/tests/test_errors.py +0 -0
  98. {getanyapi-0.44.0 → getanyapi-0.45.1}/tests/test_fixture_roundtrip.py +0 -0
  99. {getanyapi-0.44.0 → getanyapi-0.45.1}/tests/test_fixture_sweep.py +0 -0
  100. {getanyapi-0.44.0 → getanyapi-0.45.1}/tests/test_pagination.py +0 -0
  101. {getanyapi-0.44.0 → getanyapi-0.45.1}/tests/test_transport.py +0 -0
  102. {getanyapi-0.44.0 → getanyapi-0.45.1}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: getanyapi
3
- Version: 0.44.0
3
+ Version: 0.45.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.44.0"
7
+ version = "0.45.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"
@@ -54,7 +54,7 @@ from .types import (
54
54
  unwrap,
55
55
  )
56
56
 
57
- __version__ = "0.44.0"
57
+ __version__ = "0.45.1"
58
58
 
59
59
  __all__ = [
60
60
  # clients + top-level functions
@@ -3,7 +3,7 @@
3
3
 
4
4
  from __future__ import annotations
5
5
 
6
- from typing import Literal, TYPE_CHECKING
6
+ from typing import TYPE_CHECKING
7
7
 
8
8
  from pydantic import BaseModel, ConfigDict, Field
9
9
  from typing_extensions import NotRequired, Required, TypedDict, Unpack
@@ -37,10 +37,6 @@ 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."""
44
40
 
45
41
 
46
42
  class GoogleAutocompleteInput(TypedDict, total=False):
@@ -160,6 +160,8 @@ class InstagramMediaTranscriptInput(TypedDict, total=False):
160
160
  class InstagramPostInput(TypedDict, total=False):
161
161
  """Input for Instagram Post."""
162
162
 
163
+ hostVideo: NotRequired[bool]
164
+ """Set true to also get the post's video on a hosted MP4 link that plays without an Instagram session. The file is downloaded and stored for you, and the response adds `hostedUrl`, `expiresUtc` and `bytes`. It is charged as an extra on top of the price, and it never changes which source serves you: every source offers it at the same price. A post with no video, or a post that does not exist, is refused with no charge rather than billed for a file that cannot exist. Omit it and nothing is downloaded, nothing is stored, and nothing extra is charged. Default: false."""
163
165
  preferLatencyUnderMs: NotRequired[int]
164
166
  """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
167
  requireFields: NotRequired[
@@ -213,8 +215,8 @@ class InstagramProfileContactInput(TypedDict, total=False):
213
215
  class InstagramReelTranscriptInput(TypedDict, total=False):
214
216
  """Input for Instagram Reel Transcript."""
215
217
 
216
- includeTranscript: NotRequired[bool]
217
- """Set false to download and host the video only, without transcribing its speech (e.g. false). Default: true."""
218
+ hostVideo: NotRequired[bool]
219
+ """Set true to also get the reel's MP4 on a hosted link you can play without an Instagram session. Charged as an extra on top of the transcript (e.g. true). Default: false."""
218
220
  preferLatencyUnderMs: NotRequired[int]
219
221
  """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."""
220
222
  url: Required[str]
@@ -975,10 +977,24 @@ class InstagramMediaTranscriptTranscript(BaseModel):
975
977
  class InstagramPostData(BaseModel):
976
978
  model_config = ConfigDict(extra="allow", populate_by_name=True)
977
979
 
980
+ bytes: int | None = Field(
981
+ default=None,
982
+ description="Size of the hosted MP4 in bytes. Present only when the request set `hostVideo` to true.",
983
+ )
978
984
  display_url: str = Field(
979
985
  alias="displayUrl",
980
986
  description="Populated whenever the provider has data for the entity.",
981
987
  )
988
+ expires_utc: int | None = Field(
989
+ default=None,
990
+ alias="expiresUtc",
991
+ description="When `hostedUrl` stops working, as a UTC epoch timestamp in seconds (Unix time). Multiply by 1000 for a JS Date in milliseconds. Present only when the request set `hostVideo` to true.",
992
+ )
993
+ hosted_url: str | None = Field(
994
+ default=None,
995
+ alias="hostedUrl",
996
+ description="AnyAPI-hosted MP4 of this post's video, playable without an Instagram session. Present only when the request set `hostVideo` to true.",
997
+ )
982
998
  id: str = Field(
983
999
  description="Populated whenever the provider has data for the entity."
984
1000
  )
@@ -1179,7 +1195,7 @@ class InstagramProfileContactData(BaseModel):
1179
1195
 
1180
1196
  class InstagramReelTranscriptData(BaseModel):
1181
1197
  items: list[InstagramReelTranscriptItem] = Field(
1182
- description="Record for the requested reel (one item), with its hosted video link, the full transcript text, timed segments, and source video metadata. Populated whenever the provider has data for the entity."
1198
+ description="Record for the requested reel (one item), with the full transcript text, timed segments, source video metadata, and the hosted video link when hostVideo was asked for. Populated whenever the provider has data for the entity."
1183
1199
  )
1184
1200
 
1185
1201
 
@@ -1187,7 +1203,8 @@ class InstagramReelTranscriptItem(BaseModel):
1187
1203
  model_config = ConfigDict(extra="allow", populate_by_name=True)
1188
1204
 
1189
1205
  bytes: int | None = Field(
1190
- default=None, description="Size of the downloaded MP4 in bytes."
1206
+ default=None,
1207
+ description="Size of the hosted MP4 in bytes. Present only when hostVideo was true.",
1191
1208
  )
1192
1209
  duration_seconds: float | None = Field(
1193
1210
  default=None,
@@ -1197,12 +1214,12 @@ class InstagramReelTranscriptItem(BaseModel):
1197
1214
  expires_utc: float | None = Field(
1198
1215
  default=None,
1199
1216
  alias="expiresUtc",
1200
- description="UTC epoch timestamp in seconds (Unix time). Multiply by 1000 for a JS Date in milliseconds. After this moment the hosted MP4 is deleted.",
1217
+ description="UTC epoch timestamp in seconds (Unix time). Multiply by 1000 for a JS Date in milliseconds. After this moment the hosted MP4 is deleted. Present only when hostVideo was true.",
1201
1218
  )
1202
1219
  hosted_url: str | None = Field(
1203
1220
  default=None,
1204
1221
  alias="hostedUrl",
1205
- description="A direct link to the downloaded MP4, hosted by AnyAPI and playable without an Instagram session.",
1222
+ description="A direct link to the downloaded MP4, hosted by AnyAPI and playable without an Instagram session. Present only when hostVideo was true.",
1206
1223
  )
1207
1224
  id: str = Field(
1208
1225
  description="The reel's numeric Instagram media ID, as a string. Empty when the request supplied a CDN media URL, which carries no post record. Populated whenever the provider has data for the entity."
@@ -1228,14 +1245,14 @@ class InstagramReelTranscriptItem(BaseModel):
1228
1245
  )
1229
1246
  segments: list[InstagramReelTranscriptSegment] | None = Field(
1230
1247
  default=None,
1231
- description="Time-aligned transcript segments, each with its text, speaker label, and start/end offsets in seconds. Empty when includeTranscript was false.",
1248
+ description="Time-aligned transcript segments in playback order, one per sentence, each with its text, speaker label, and start/end offsets in seconds. A segment starts when its first word is spoken and ends when its last one finishes. Empty when the reel has no detectable spoken audio.",
1232
1249
  )
1233
1250
  shortcode: str | None = Field(
1234
1251
  default=None,
1235
1252
  description="The reel's short code, the part of its instagram.com URL after /reel/. Empty when the request supplied a CDN media URL.",
1236
1253
  )
1237
1254
  text: str = Field(
1238
- description="The full speech transcript. Empty when the reel has no detectable spoken audio, and when includeTranscript was false. Populated whenever the provider has data for the entity."
1255
+ description="The full speech transcript. Empty when the reel has no detectable spoken audio. Populated whenever the provider has data for the entity."
1239
1256
  )
1240
1257
  thumbnail_url: str | None = Field(
1241
1258
  default=None,
@@ -1245,11 +1262,6 @@ class InstagramReelTranscriptItem(BaseModel):
1245
1262
  url: str = Field(
1246
1263
  description="The reel URL the request asked for, returned as sent. Populated whenever the provider has data for the entity."
1247
1264
  )
1248
- view_count: int | None = Field(
1249
- default=None,
1250
- alias="viewCount",
1251
- description="Number of video views. Absent when the lane that served the lookup does not carry a view count.",
1252
- )
1253
1265
 
1254
1266
 
1255
1267
  class InstagramReelTranscriptSegment(BaseModel):
@@ -2464,7 +2476,10 @@ class InstagramNamespace:
2464
2476
  """Instagram Post
2465
2477
 
2466
2478
  Fetch a single Instagram post or reel by URL (media URLs, like count, owner,
2467
- type) as normalized JSON.
2479
+ type) as normalized JSON. Turn on hostVideo to also get the post's video on
2480
+ a hosted MP4 link that plays without an Instagram session, charged as an
2481
+ extra on top of the price. If you want the spoken words as well,
2482
+ instagram.reel_transcript transcribes the same reel.
2468
2483
 
2469
2484
  Price: $0.0005 per request.
2470
2485
 
@@ -2592,16 +2607,19 @@ class InstagramNamespace:
2592
2607
  ) -> RunResult[InstagramReelTranscriptData]:
2593
2608
  """Instagram Reel Transcript
2594
2609
 
2595
- Download any public Instagram reel or video post to a hosted MP4 link, with
2596
- an optional full speech transcript, speaker labels, and word-level
2597
- timestamps. Transcription runs on MAI-Transcribe-2, chosen for its accuracy
2598
- and its speaker labels. If you only want the text and not the video file,
2599
- instagram.media_transcript is the cheaper transcript-only option.
2610
+ Transcribe any public Instagram reel or video post: the full speech
2611
+ transcript, speaker labels, and word-level timestamps, from a reel URL or an
2612
+ Instagram CDN media URL you already hold. Transcription runs on
2613
+ MAI-Transcribe-2, chosen for its accuracy and its speaker labels. Turn on
2614
+ hostVideo to also get the MP4 on a hosted link that plays without an
2615
+ Instagram session. If you only want the text, instagram.media_transcript is
2616
+ the cheaper transcript-only option; if you only want the file,
2617
+ instagram.post is where you go.
2600
2618
 
2601
- Price: $0.005 per request plus $0.006 per audio minute (maximum $0.05).
2619
+ Price: $0.0015 per request plus $0.006 per audio minute (maximum $0.095).
2602
2620
 
2603
2621
  Example:
2604
- res = client.instagram.reel_transcript(includeTranscript=True, url="https://www.instagram.com/reel/CfY6jCIgH-P/", wordTimestamps=False)
2622
+ res = client.instagram.reel_transcript(hostVideo=True, url="https://www.instagram.com/reel/CfY6jCIgH-P/", wordTimestamps=False)
2605
2623
  """
2606
2624
  raw = self._client._run_raw( # pyright: ignore[reportPrivateUsage]
2607
2625
  "instagram.reel_transcript", dict(input), options
@@ -3485,7 +3503,10 @@ class AsyncInstagramNamespace:
3485
3503
  """Instagram Post
3486
3504
 
3487
3505
  Fetch a single Instagram post or reel by URL (media URLs, like count, owner,
3488
- type) as normalized JSON.
3506
+ type) as normalized JSON. Turn on hostVideo to also get the post's video on
3507
+ a hosted MP4 link that plays without an Instagram session, charged as an
3508
+ extra on top of the price. If you want the spoken words as well,
3509
+ instagram.reel_transcript transcribes the same reel.
3489
3510
 
3490
3511
  Price: $0.0005 per request.
3491
3512
 
@@ -3613,16 +3634,19 @@ class AsyncInstagramNamespace:
3613
3634
  ) -> RunResult[InstagramReelTranscriptData]:
3614
3635
  """Instagram Reel Transcript
3615
3636
 
3616
- Download any public Instagram reel or video post to a hosted MP4 link, with
3617
- an optional full speech transcript, speaker labels, and word-level
3618
- timestamps. Transcription runs on MAI-Transcribe-2, chosen for its accuracy
3619
- and its speaker labels. If you only want the text and not the video file,
3620
- instagram.media_transcript is the cheaper transcript-only option.
3637
+ Transcribe any public Instagram reel or video post: the full speech
3638
+ transcript, speaker labels, and word-level timestamps, from a reel URL or an
3639
+ Instagram CDN media URL you already hold. Transcription runs on
3640
+ MAI-Transcribe-2, chosen for its accuracy and its speaker labels. Turn on
3641
+ hostVideo to also get the MP4 on a hosted link that plays without an
3642
+ Instagram session. If you only want the text, instagram.media_transcript is
3643
+ the cheaper transcript-only option; if you only want the file,
3644
+ instagram.post is where you go.
3621
3645
 
3622
- Price: $0.005 per request plus $0.006 per audio minute (maximum $0.05).
3646
+ Price: $0.0015 per request plus $0.006 per audio minute (maximum $0.095).
3623
3647
 
3624
3648
  Example:
3625
- res = client.instagram.reel_transcript(includeTranscript=True, url="https://www.instagram.com/reel/CfY6jCIgH-P/", wordTimestamps=False)
3649
+ res = client.instagram.reel_transcript(hostVideo=True, url="https://www.instagram.com/reel/CfY6jCIgH-P/", wordTimestamps=False)
3626
3650
  """
3627
3651
  raw = await self._client._arun_raw( # pyright: ignore[reportPrivateUsage]
3628
3652
  "instagram.reel_transcript", dict(input), options
@@ -869,7 +869,7 @@ class YoutubeNamespace:
869
869
  Fetch a YouTube channel's stats (subscribers, video count, total views,
870
870
  description) by handle or channel ID.
871
871
 
872
- Price: $0.0012 per request.
872
+ Price: $0.0005 per request.
873
873
 
874
874
  Example:
875
875
  res = client.youtube.channel(handle="@mkbhd")
@@ -1484,7 +1484,7 @@ class AsyncYoutubeNamespace:
1484
1484
  Fetch a YouTube channel's stats (subscribers, video count, total views,
1485
1485
  description) by handle or channel ID.
1486
1486
 
1487
- Price: $0.0012 per request.
1487
+ Price: $0.0005 per request.
1488
1488
 
1489
1489
  Example:
1490
1490
  res = client.youtube.channel(handle="@mkbhd")
File without changes
File without changes
File without changes
File without changes