getanyapi 0.87.0__tar.gz → 0.88.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 (108) hide show
  1. {getanyapi-0.87.0 → getanyapi-0.88.0}/PKG-INFO +1 -1
  2. {getanyapi-0.87.0 → getanyapi-0.88.0}/pyproject.toml +1 -1
  3. {getanyapi-0.87.0 → getanyapi-0.88.0}/src/getanyapi/__init__.py +1 -1
  4. {getanyapi-0.87.0 → getanyapi-0.88.0}/src/getanyapi/platforms/booking.py +2 -2
  5. {getanyapi-0.87.0 → getanyapi-0.88.0}/src/getanyapi/platforms/google.py +747 -0
  6. {getanyapi-0.87.0 → getanyapi-0.88.0}/src/getanyapi/platforms/instagram.py +2 -2
  7. {getanyapi-0.87.0 → getanyapi-0.88.0}/.gitignore +0 -0
  8. {getanyapi-0.87.0 → getanyapi-0.88.0}/README.md +0 -0
  9. {getanyapi-0.87.0 → getanyapi-0.88.0}/src/getanyapi/_account.py +0 -0
  10. {getanyapi-0.87.0 → getanyapi-0.88.0}/src/getanyapi/_async_client.py +0 -0
  11. {getanyapi-0.87.0 → getanyapi-0.88.0}/src/getanyapi/_client.py +0 -0
  12. {getanyapi-0.87.0 → getanyapi-0.88.0}/src/getanyapi/_errors.py +0 -0
  13. {getanyapi-0.87.0 → getanyapi-0.88.0}/src/getanyapi/_idempotency.py +0 -0
  14. {getanyapi-0.87.0 → getanyapi-0.88.0}/src/getanyapi/_pagination.py +0 -0
  15. {getanyapi-0.87.0 → getanyapi-0.88.0}/src/getanyapi/_transport.py +0 -0
  16. {getanyapi-0.87.0 → getanyapi-0.88.0}/src/getanyapi/discovery_types.py +0 -0
  17. {getanyapi-0.87.0 → getanyapi-0.88.0}/src/getanyapi/platforms/__init__.py +0 -0
  18. {getanyapi-0.87.0 → getanyapi-0.88.0}/src/getanyapi/platforms/ahrefs.py +0 -0
  19. {getanyapi-0.87.0 → getanyapi-0.88.0}/src/getanyapi/platforms/airbnb.py +0 -0
  20. {getanyapi-0.87.0 → getanyapi-0.88.0}/src/getanyapi/platforms/alibaba.py +0 -0
  21. {getanyapi-0.87.0 → getanyapi-0.88.0}/src/getanyapi/platforms/amazon.py +0 -0
  22. {getanyapi-0.87.0 → getanyapi-0.88.0}/src/getanyapi/platforms/apollo.py +0 -0
  23. {getanyapi-0.87.0 → getanyapi-0.88.0}/src/getanyapi/platforms/appstore.py +0 -0
  24. {getanyapi-0.87.0 → getanyapi-0.88.0}/src/getanyapi/platforms/bluesky.py +0 -0
  25. {getanyapi-0.87.0 → getanyapi-0.88.0}/src/getanyapi/platforms/capterra.py +0 -0
  26. {getanyapi-0.87.0 → getanyapi-0.88.0}/src/getanyapi/platforms/chatgpt.py +0 -0
  27. {getanyapi-0.87.0 → getanyapi-0.88.0}/src/getanyapi/platforms/coinmarketcap.py +0 -0
  28. {getanyapi-0.87.0 → getanyapi-0.88.0}/src/getanyapi/platforms/company.py +0 -0
  29. {getanyapi-0.87.0 → getanyapi-0.88.0}/src/getanyapi/platforms/company_enrichment.py +0 -0
  30. {getanyapi-0.87.0 → getanyapi-0.88.0}/src/getanyapi/platforms/company_identify.py +0 -0
  31. {getanyapi-0.87.0 → getanyapi-0.88.0}/src/getanyapi/platforms/company_search.py +0 -0
  32. {getanyapi-0.87.0 → getanyapi-0.88.0}/src/getanyapi/platforms/congress.py +0 -0
  33. {getanyapi-0.87.0 → getanyapi-0.88.0}/src/getanyapi/platforms/contact_enrichment.py +0 -0
  34. {getanyapi-0.87.0 → getanyapi-0.88.0}/src/getanyapi/platforms/douyin.py +0 -0
  35. {getanyapi-0.87.0 → getanyapi-0.88.0}/src/getanyapi/platforms/ebay.py +0 -0
  36. {getanyapi-0.87.0 → getanyapi-0.88.0}/src/getanyapi/platforms/email.py +0 -0
  37. {getanyapi-0.87.0 → getanyapi-0.88.0}/src/getanyapi/platforms/email_finding.py +0 -0
  38. {getanyapi-0.87.0 → getanyapi-0.88.0}/src/getanyapi/platforms/email_verification.py +0 -0
  39. {getanyapi-0.87.0 → getanyapi-0.88.0}/src/getanyapi/platforms/facebook.py +0 -0
  40. {getanyapi-0.87.0 → getanyapi-0.88.0}/src/getanyapi/platforms/fiverr.py +0 -0
  41. {getanyapi-0.87.0 → getanyapi-0.88.0}/src/getanyapi/platforms/g2.py +0 -0
  42. {getanyapi-0.87.0 → getanyapi-0.88.0}/src/getanyapi/platforms/gemini.py +0 -0
  43. {getanyapi-0.87.0 → getanyapi-0.88.0}/src/getanyapi/platforms/github.py +0 -0
  44. {getanyapi-0.87.0 → getanyapi-0.88.0}/src/getanyapi/platforms/glassdoor.py +0 -0
  45. {getanyapi-0.87.0 → getanyapi-0.88.0}/src/getanyapi/platforms/google_ads.py +0 -0
  46. {getanyapi-0.87.0 → getanyapi-0.88.0}/src/getanyapi/platforms/google_finance.py +0 -0
  47. {getanyapi-0.87.0 → getanyapi-0.88.0}/src/getanyapi/platforms/google_shopping.py +0 -0
  48. {getanyapi-0.87.0 → getanyapi-0.88.0}/src/getanyapi/platforms/hackernews.py +0 -0
  49. {getanyapi-0.87.0 → getanyapi-0.88.0}/src/getanyapi/platforms/indeed.py +0 -0
  50. {getanyapi-0.87.0 → getanyapi-0.88.0}/src/getanyapi/platforms/job_search.py +0 -0
  51. {getanyapi-0.87.0 → getanyapi-0.88.0}/src/getanyapi/platforms/linkedin.py +0 -0
  52. {getanyapi-0.87.0 → getanyapi-0.88.0}/src/getanyapi/platforms/maps.py +0 -0
  53. {getanyapi-0.87.0 → getanyapi-0.88.0}/src/getanyapi/platforms/mobile_phone.py +0 -0
  54. {getanyapi-0.87.0 → getanyapi-0.88.0}/src/getanyapi/platforms/naver.py +0 -0
  55. {getanyapi-0.87.0 → getanyapi-0.88.0}/src/getanyapi/platforms/nextdoor.py +0 -0
  56. {getanyapi-0.87.0 → getanyapi-0.88.0}/src/getanyapi/platforms/people_search.py +0 -0
  57. {getanyapi-0.87.0 → getanyapi-0.88.0}/src/getanyapi/platforms/perplexity.py +0 -0
  58. {getanyapi-0.87.0 → getanyapi-0.88.0}/src/getanyapi/platforms/person.py +0 -0
  59. {getanyapi-0.87.0 → getanyapi-0.88.0}/src/getanyapi/platforms/person_enrichment.py +0 -0
  60. {getanyapi-0.87.0 → getanyapi-0.88.0}/src/getanyapi/platforms/pexels.py +0 -0
  61. {getanyapi-0.87.0 → getanyapi-0.88.0}/src/getanyapi/platforms/pinterest.py +0 -0
  62. {getanyapi-0.87.0 → getanyapi-0.88.0}/src/getanyapi/platforms/playstore.py +0 -0
  63. {getanyapi-0.87.0 → getanyapi-0.88.0}/src/getanyapi/platforms/polymarket.py +0 -0
  64. {getanyapi-0.87.0 → getanyapi-0.88.0}/src/getanyapi/platforms/property_records.py +0 -0
  65. {getanyapi-0.87.0 → getanyapi-0.88.0}/src/getanyapi/platforms/realtor.py +0 -0
  66. {getanyapi-0.87.0 → getanyapi-0.88.0}/src/getanyapi/platforms/reddit.py +0 -0
  67. {getanyapi-0.87.0 → getanyapi-0.88.0}/src/getanyapi/platforms/redfin.py +0 -0
  68. {getanyapi-0.87.0 → getanyapi-0.88.0}/src/getanyapi/platforms/rednote.py +0 -0
  69. {getanyapi-0.87.0 → getanyapi-0.88.0}/src/getanyapi/platforms/sec.py +0 -0
  70. {getanyapi-0.87.0 → getanyapi-0.88.0}/src/getanyapi/platforms/semrush.py +0 -0
  71. {getanyapi-0.87.0 → getanyapi-0.88.0}/src/getanyapi/platforms/seo.py +0 -0
  72. {getanyapi-0.87.0 → getanyapi-0.88.0}/src/getanyapi/platforms/similarweb.py +0 -0
  73. {getanyapi-0.87.0 → getanyapi-0.88.0}/src/getanyapi/platforms/snapchat.py +0 -0
  74. {getanyapi-0.87.0 → getanyapi-0.88.0}/src/getanyapi/platforms/social.py +0 -0
  75. {getanyapi-0.87.0 → getanyapi-0.88.0}/src/getanyapi/platforms/spotify.py +0 -0
  76. {getanyapi-0.87.0 → getanyapi-0.88.0}/src/getanyapi/platforms/substack.py +0 -0
  77. {getanyapi-0.87.0 → getanyapi-0.88.0}/src/getanyapi/platforms/technographics.py +0 -0
  78. {getanyapi-0.87.0 → getanyapi-0.88.0}/src/getanyapi/platforms/threads.py +0 -0
  79. {getanyapi-0.87.0 → getanyapi-0.88.0}/src/getanyapi/platforms/tiktok.py +0 -0
  80. {getanyapi-0.87.0 → getanyapi-0.88.0}/src/getanyapi/platforms/tiktok_shop.py +0 -0
  81. {getanyapi-0.87.0 → getanyapi-0.88.0}/src/getanyapi/platforms/tripadvisor.py +0 -0
  82. {getanyapi-0.87.0 → getanyapi-0.88.0}/src/getanyapi/platforms/trustpilot.py +0 -0
  83. {getanyapi-0.87.0 → getanyapi-0.88.0}/src/getanyapi/platforms/truthsocial.py +0 -0
  84. {getanyapi-0.87.0 → getanyapi-0.88.0}/src/getanyapi/platforms/twitter.py +0 -0
  85. {getanyapi-0.87.0 → getanyapi-0.88.0}/src/getanyapi/platforms/unsplash.py +0 -0
  86. {getanyapi-0.87.0 → getanyapi-0.88.0}/src/getanyapi/platforms/upwork.py +0 -0
  87. {getanyapi-0.87.0 → getanyapi-0.88.0}/src/getanyapi/platforms/walmart.py +0 -0
  88. {getanyapi-0.87.0 → getanyapi-0.88.0}/src/getanyapi/platforms/web.py +0 -0
  89. {getanyapi-0.87.0 → getanyapi-0.88.0}/src/getanyapi/platforms/weibo.py +0 -0
  90. {getanyapi-0.87.0 → getanyapi-0.88.0}/src/getanyapi/platforms/yahoo_finance.py +0 -0
  91. {getanyapi-0.87.0 → getanyapi-0.88.0}/src/getanyapi/platforms/yelp.py +0 -0
  92. {getanyapi-0.87.0 → getanyapi-0.88.0}/src/getanyapi/platforms/youtube.py +0 -0
  93. {getanyapi-0.87.0 → getanyapi-0.88.0}/src/getanyapi/platforms/zhihu.py +0 -0
  94. {getanyapi-0.87.0 → getanyapi-0.88.0}/src/getanyapi/platforms/zillow.py +0 -0
  95. {getanyapi-0.87.0 → getanyapi-0.88.0}/src/getanyapi/py.typed +0 -0
  96. {getanyapi-0.87.0 → getanyapi-0.88.0}/src/getanyapi/types.py +0 -0
  97. {getanyapi-0.87.0 → getanyapi-0.88.0}/tests/conftest.py +0 -0
  98. {getanyapi-0.87.0 → getanyapi-0.88.0}/tests/test_account.py +0 -0
  99. {getanyapi-0.87.0 → getanyapi-0.88.0}/tests/test_client.py +0 -0
  100. {getanyapi-0.87.0 → getanyapi-0.88.0}/tests/test_durable_requests.py +0 -0
  101. {getanyapi-0.87.0 → getanyapi-0.88.0}/tests/test_envelope.py +0 -0
  102. {getanyapi-0.87.0 → getanyapi-0.88.0}/tests/test_errors.py +0 -0
  103. {getanyapi-0.87.0 → getanyapi-0.88.0}/tests/test_fixture_roundtrip.py +0 -0
  104. {getanyapi-0.87.0 → getanyapi-0.88.0}/tests/test_fixture_sweep.py +0 -0
  105. {getanyapi-0.87.0 → getanyapi-0.88.0}/tests/test_not_found_reason.py +0 -0
  106. {getanyapi-0.87.0 → getanyapi-0.88.0}/tests/test_pagination.py +0 -0
  107. {getanyapi-0.87.0 → getanyapi-0.88.0}/tests/test_transport.py +0 -0
  108. {getanyapi-0.87.0 → getanyapi-0.88.0}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: getanyapi
3
- Version: 0.87.0
3
+ Version: 0.88.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.87.0"
7
+ version = "0.88.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.87.0"
58
+ __version__ = "0.88.0"
59
59
 
60
60
  __all__ = [
61
61
  # clients + top-level functions
@@ -153,7 +153,7 @@ class BookingNamespace:
153
153
  Price: $0.0022 per request plus $0.00495 per result (maximum $0.102).
154
154
 
155
155
  Example:
156
- res = client.booking.search(adults=2, checkIn="2026-09-01", checkOut="2026-09-03", limit=3, query="New York")
156
+ res = client.booking.search(adults=2, checkIn="2026-10-31", checkOut="2026-11-02", limit=3, query="New York")
157
157
  """
158
158
  raw = self._client._run_raw( # pyright: ignore[reportPrivateUsage]
159
159
  "booking.search", dict(input), options
@@ -182,7 +182,7 @@ class AsyncBookingNamespace:
182
182
  Price: $0.0022 per request plus $0.00495 per result (maximum $0.102).
183
183
 
184
184
  Example:
185
- res = client.booking.search(adults=2, checkIn="2026-09-01", checkOut="2026-09-03", limit=3, query="New York")
185
+ res = client.booking.search(adults=2, checkIn="2026-10-31", checkOut="2026-11-02", limit=3, query="New York")
186
186
  """
187
187
  raw = await self._client._arun_raw( # pyright: ignore[reportPrivateUsage]
188
188
  "booking.search", dict(input), options
@@ -85,6 +85,496 @@ class GoogleAutocompleteInput(TypedDict, total=False):
85
85
  """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`."""
86
86
 
87
87
 
88
+ class GoogleHotelDetailsInput(TypedDict, total=False):
89
+ """Input for Google Hotel Details."""
90
+
91
+ adults: NotRequired[int]
92
+ """Number of adult guests (default 2). Minimum: 1. Default: 2."""
93
+ allowFallbacks: NotRequired[bool]
94
+ """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."""
95
+ checkIn: Required[str]
96
+ """Check-in date in YYYY-MM-DD format (e.g. 2027-04-13). Today or later."""
97
+ checkOut: Required[str]
98
+ """Check-out date in YYYY-MM-DD format (e.g. 2027-04-15). After the check-in date."""
99
+ childrenAges: NotRequired[list[int]]
100
+ """Age of each child guest, one entry per child (e.g. [5, 8] for two children aged 5 and 8). Omit it when no children are staying."""
101
+ country: Required[
102
+ Literal[
103
+ "ad",
104
+ "ae",
105
+ "af",
106
+ "ag",
107
+ "al",
108
+ "am",
109
+ "ao",
110
+ "aq",
111
+ "ar",
112
+ "as",
113
+ "at",
114
+ "au",
115
+ "az",
116
+ "ba",
117
+ "bb",
118
+ "bd",
119
+ "be",
120
+ "bf",
121
+ "bg",
122
+ "bh",
123
+ "bi",
124
+ "bj",
125
+ "bn",
126
+ "bo",
127
+ "bq",
128
+ "br",
129
+ "bs",
130
+ "bt",
131
+ "bw",
132
+ "bz",
133
+ "ca",
134
+ "cc",
135
+ "cd",
136
+ "cf",
137
+ "cg",
138
+ "ch",
139
+ "ci",
140
+ "ck",
141
+ "cl",
142
+ "cm",
143
+ "cn",
144
+ "co",
145
+ "cr",
146
+ "cv",
147
+ "cw",
148
+ "cx",
149
+ "cy",
150
+ "cz",
151
+ "de",
152
+ "dj",
153
+ "dk",
154
+ "dm",
155
+ "do",
156
+ "dz",
157
+ "ec",
158
+ "ee",
159
+ "eg",
160
+ "er",
161
+ "es",
162
+ "et",
163
+ "fi",
164
+ "fj",
165
+ "fm",
166
+ "fr",
167
+ "ga",
168
+ "gb",
169
+ "gd",
170
+ "ge",
171
+ "gg",
172
+ "gh",
173
+ "gm",
174
+ "gn",
175
+ "gq",
176
+ "gr",
177
+ "gs",
178
+ "gt",
179
+ "gu",
180
+ "gw",
181
+ "gy",
182
+ "hm",
183
+ "hn",
184
+ "hr",
185
+ "ht",
186
+ "hu",
187
+ "id",
188
+ "ie",
189
+ "il",
190
+ "im",
191
+ "in",
192
+ "iq",
193
+ "is",
194
+ "it",
195
+ "je",
196
+ "jm",
197
+ "jo",
198
+ "jp",
199
+ "ke",
200
+ "kg",
201
+ "kh",
202
+ "ki",
203
+ "km",
204
+ "kn",
205
+ "kr",
206
+ "kw",
207
+ "kz",
208
+ "la",
209
+ "lb",
210
+ "lc",
211
+ "li",
212
+ "lk",
213
+ "lr",
214
+ "ls",
215
+ "lt",
216
+ "lu",
217
+ "lv",
218
+ "ly",
219
+ "ma",
220
+ "mc",
221
+ "md",
222
+ "me",
223
+ "mf",
224
+ "mg",
225
+ "mh",
226
+ "mk",
227
+ "ml",
228
+ "mm",
229
+ "mn",
230
+ "mp",
231
+ "mr",
232
+ "mt",
233
+ "mu",
234
+ "mv",
235
+ "mw",
236
+ "mx",
237
+ "my",
238
+ "mz",
239
+ "na",
240
+ "nc",
241
+ "ne",
242
+ "nf",
243
+ "ng",
244
+ "ni",
245
+ "nl",
246
+ "no",
247
+ "np",
248
+ "nr",
249
+ "nu",
250
+ "nz",
251
+ "om",
252
+ "pa",
253
+ "pe",
254
+ "pf",
255
+ "pg",
256
+ "ph",
257
+ "pk",
258
+ "pl",
259
+ "pm",
260
+ "pn",
261
+ "pt",
262
+ "pw",
263
+ "py",
264
+ "qa",
265
+ "ro",
266
+ "rs",
267
+ "rw",
268
+ "sa",
269
+ "sb",
270
+ "sc",
271
+ "se",
272
+ "sg",
273
+ "sh",
274
+ "si",
275
+ "sk",
276
+ "sl",
277
+ "sm",
278
+ "sn",
279
+ "so",
280
+ "sr",
281
+ "st",
282
+ "sv",
283
+ "sx",
284
+ "sz",
285
+ "td",
286
+ "tf",
287
+ "tg",
288
+ "th",
289
+ "tj",
290
+ "tk",
291
+ "tl",
292
+ "tm",
293
+ "tn",
294
+ "to",
295
+ "tr",
296
+ "tt",
297
+ "tv",
298
+ "tz",
299
+ "ua",
300
+ "ug",
301
+ "um",
302
+ "us",
303
+ "uy",
304
+ "uz",
305
+ "va",
306
+ "vc",
307
+ "ve",
308
+ "vn",
309
+ "vu",
310
+ "wf",
311
+ "ws",
312
+ "ye",
313
+ "za",
314
+ "zm",
315
+ "zw",
316
+ ]
317
+ ]
318
+ """Two-letter lowercase ISO 3166-1 country code of the destination (e.g. us, pt, jp). It must be the country the hotels are in: results are searched from that country."""
319
+ currency: NotRequired[str]
320
+ """ISO 4217 currency code for prices (e.g. USD, EUR, JPY; default USD). Default: USD."""
321
+ ignoreSources: NotRequired[list[str]]
322
+ """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."""
323
+ preferLatencyUnderMs: NotRequired[int]
324
+ """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."""
325
+ propertyToken: Required[str]
326
+ """Google Hotels property ID of the hotel, the propertyToken google.hotels returns for it."""
327
+ requireFields: NotRequired[list[Literal["images", "stars", "totalPrice"]]]
328
+ """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 `stars` or `images`, 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 hotel that genuinely lacks it. Naming a combination that no single source returns together is refused as invalid input, with no charge."""
329
+ source: NotRequired[list[str]]
330
+ """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`."""
331
+
332
+
333
+ class GoogleHotelsInput(TypedDict, total=False):
334
+ """Input for Google Hotels Search."""
335
+
336
+ adults: NotRequired[int]
337
+ """Number of adult guests (default 2). Minimum: 1. Default: 2."""
338
+ allowFallbacks: NotRequired[bool]
339
+ """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."""
340
+ checkIn: Required[str]
341
+ """Check-in date in YYYY-MM-DD format (e.g. 2027-04-13). Today or later."""
342
+ checkOut: Required[str]
343
+ """Check-out date in YYYY-MM-DD format (e.g. 2027-04-15). After the check-in date."""
344
+ childrenAges: NotRequired[list[int]]
345
+ """Age of each child guest, one entry per child (e.g. [5, 8] for two children aged 5 and 8). Omit it when no children are staying."""
346
+ country: Required[
347
+ Literal[
348
+ "ad",
349
+ "ae",
350
+ "af",
351
+ "ag",
352
+ "al",
353
+ "am",
354
+ "ao",
355
+ "aq",
356
+ "ar",
357
+ "as",
358
+ "at",
359
+ "au",
360
+ "az",
361
+ "ba",
362
+ "bb",
363
+ "bd",
364
+ "be",
365
+ "bf",
366
+ "bg",
367
+ "bh",
368
+ "bi",
369
+ "bj",
370
+ "bn",
371
+ "bo",
372
+ "bq",
373
+ "br",
374
+ "bs",
375
+ "bt",
376
+ "bw",
377
+ "bz",
378
+ "ca",
379
+ "cc",
380
+ "cd",
381
+ "cf",
382
+ "cg",
383
+ "ch",
384
+ "ci",
385
+ "ck",
386
+ "cl",
387
+ "cm",
388
+ "cn",
389
+ "co",
390
+ "cr",
391
+ "cv",
392
+ "cw",
393
+ "cx",
394
+ "cy",
395
+ "cz",
396
+ "de",
397
+ "dj",
398
+ "dk",
399
+ "dm",
400
+ "do",
401
+ "dz",
402
+ "ec",
403
+ "ee",
404
+ "eg",
405
+ "er",
406
+ "es",
407
+ "et",
408
+ "fi",
409
+ "fj",
410
+ "fm",
411
+ "fr",
412
+ "ga",
413
+ "gb",
414
+ "gd",
415
+ "ge",
416
+ "gg",
417
+ "gh",
418
+ "gm",
419
+ "gn",
420
+ "gq",
421
+ "gr",
422
+ "gs",
423
+ "gt",
424
+ "gu",
425
+ "gw",
426
+ "gy",
427
+ "hm",
428
+ "hn",
429
+ "hr",
430
+ "ht",
431
+ "hu",
432
+ "id",
433
+ "ie",
434
+ "il",
435
+ "im",
436
+ "in",
437
+ "iq",
438
+ "is",
439
+ "it",
440
+ "je",
441
+ "jm",
442
+ "jo",
443
+ "jp",
444
+ "ke",
445
+ "kg",
446
+ "kh",
447
+ "ki",
448
+ "km",
449
+ "kn",
450
+ "kr",
451
+ "kw",
452
+ "kz",
453
+ "la",
454
+ "lb",
455
+ "lc",
456
+ "li",
457
+ "lk",
458
+ "lr",
459
+ "ls",
460
+ "lt",
461
+ "lu",
462
+ "lv",
463
+ "ly",
464
+ "ma",
465
+ "mc",
466
+ "md",
467
+ "me",
468
+ "mf",
469
+ "mg",
470
+ "mh",
471
+ "mk",
472
+ "ml",
473
+ "mm",
474
+ "mn",
475
+ "mp",
476
+ "mr",
477
+ "mt",
478
+ "mu",
479
+ "mv",
480
+ "mw",
481
+ "mx",
482
+ "my",
483
+ "mz",
484
+ "na",
485
+ "nc",
486
+ "ne",
487
+ "nf",
488
+ "ng",
489
+ "ni",
490
+ "nl",
491
+ "no",
492
+ "np",
493
+ "nr",
494
+ "nu",
495
+ "nz",
496
+ "om",
497
+ "pa",
498
+ "pe",
499
+ "pf",
500
+ "pg",
501
+ "ph",
502
+ "pk",
503
+ "pl",
504
+ "pm",
505
+ "pn",
506
+ "pt",
507
+ "pw",
508
+ "py",
509
+ "qa",
510
+ "ro",
511
+ "rs",
512
+ "rw",
513
+ "sa",
514
+ "sb",
515
+ "sc",
516
+ "se",
517
+ "sg",
518
+ "sh",
519
+ "si",
520
+ "sk",
521
+ "sl",
522
+ "sm",
523
+ "sn",
524
+ "so",
525
+ "sr",
526
+ "st",
527
+ "sv",
528
+ "sx",
529
+ "sz",
530
+ "td",
531
+ "tf",
532
+ "tg",
533
+ "th",
534
+ "tj",
535
+ "tk",
536
+ "tl",
537
+ "tm",
538
+ "tn",
539
+ "to",
540
+ "tr",
541
+ "tt",
542
+ "tv",
543
+ "tz",
544
+ "ua",
545
+ "ug",
546
+ "um",
547
+ "us",
548
+ "uy",
549
+ "uz",
550
+ "va",
551
+ "vc",
552
+ "ve",
553
+ "vn",
554
+ "vu",
555
+ "wf",
556
+ "ws",
557
+ "ye",
558
+ "za",
559
+ "zm",
560
+ "zw",
561
+ ]
562
+ ]
563
+ """Two-letter lowercase ISO 3166-1 country code of the destination (e.g. us, pt, jp). It must be the country the hotels are in: results are searched from that country."""
564
+ currency: NotRequired[str]
565
+ """ISO 4217 currency code for prices (e.g. USD, EUR, JPY; default USD). Default: USD."""
566
+ ignoreSources: NotRequired[list[str]]
567
+ """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."""
568
+ preferLatencyUnderMs: NotRequired[int]
569
+ """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."""
570
+ query: Required[str]
571
+ """What to search for, usually a destination or landmark (e.g. hotels near times square new york)."""
572
+ requireFields: NotRequired[list[Literal["amenities", "description", "totalPrice"]]]
573
+ """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 `totalPrice` or `amenities`, 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 hotel that genuinely lacks it. Naming a combination that no single source returns together is refused as invalid input, with no charge."""
574
+ source: NotRequired[list[str]]
575
+ """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`."""
576
+
577
+
88
578
  class GoogleImagesInput(TypedDict, total=False):
89
579
  """Input for Google Images."""
90
580
 
@@ -368,6 +858,175 @@ class GoogleAutocompleteSuggestion(BaseModel):
368
858
  )
369
859
 
370
860
 
861
+ class GoogleHotelDetailsData(BaseModel):
862
+ model_config = ConfigDict(populate_by_name=True)
863
+
864
+ address: str | None = Field(
865
+ default=None,
866
+ description="Street address. Populated whenever the provider has data for the entity. Present whenever the upstream returns this record.",
867
+ )
868
+ amenities: list[GoogleHotelDetailsAmenitie] | None = Field(
869
+ default=None,
870
+ description="Amenities Google lists for the hotel, each with whether the hotel offers it. Populated whenever the provider has data for the entity. Present whenever the upstream returns this record.",
871
+ )
872
+ check_in_time: str | None = Field(
873
+ default=None,
874
+ alias="checkInTime",
875
+ description="Earliest check-in time, 24-hour HH:MM local time. Populated whenever the provider has data for the entity. Present whenever the upstream returns this record.",
876
+ )
877
+ check_out_time: str | None = Field(
878
+ default=None,
879
+ alias="checkOutTime",
880
+ description="Latest check-out time, 24-hour HH:MM local time. Populated whenever the provider has data for the entity. Present whenever the upstream returns this record.",
881
+ )
882
+ currency: str | None = Field(
883
+ default=None,
884
+ description="ISO 4217 currency code every price in this response is in. Populated whenever the provider has data for the entity. Present whenever the upstream returns this record.",
885
+ )
886
+ images: list[str] | None = Field(
887
+ default=None,
888
+ description="Preview photo URLs of the hotel, or null when unknown.",
889
+ )
890
+ latitude: float | None = Field(
891
+ default=None,
892
+ description="Latitude of the hotel. Populated whenever the provider has data for the entity. Present whenever the upstream returns this record.",
893
+ )
894
+ longitude: float | None = Field(
895
+ default=None,
896
+ description="Longitude of the hotel. Populated whenever the provider has data for the entity. Present whenever the upstream returns this record.",
897
+ )
898
+ name: str = Field(description="Hotel name.")
899
+ phone: str | None = Field(
900
+ default=None,
901
+ description="Phone number as published. Populated whenever the provider has data for the entity. Present whenever the upstream returns this record.",
902
+ )
903
+ price_per_night: float | None = Field(
904
+ default=None,
905
+ alias="pricePerNight",
906
+ description="Lowest nightly price for the requested dates and guests, in the response currency, or null when no price is offered. Populated whenever the provider has data for the entity. Present whenever the upstream returns this record.",
907
+ )
908
+ prices: list[GoogleHotelDetailsPrice] | None = Field(
909
+ default=None,
910
+ description="Nightly prices offered by each booking site for the requested dates. Populated whenever the provider has data for the entity. Present whenever the upstream returns this record.",
911
+ )
912
+ property_token: str = Field(
913
+ alias="propertyToken", description="Google Hotels property ID."
914
+ )
915
+ rating: float | None = Field(
916
+ default=None,
917
+ description="Average guest rating out of 5, or null when the hotel has no ratings. Populated whenever the provider has data for the entity. Present whenever the upstream returns this record.",
918
+ )
919
+ reviews_count: int | None = Field(
920
+ default=None,
921
+ alias="reviewsCount",
922
+ description="Number of guest reviews. Populated whenever the provider has data for the entity. Present whenever the upstream returns this record.",
923
+ )
924
+ stars: int | None = Field(
925
+ default=None, description="Hotel star class (1-5), or null when unknown."
926
+ )
927
+ total_price: float | None = Field(
928
+ default=None,
929
+ alias="totalPrice",
930
+ description="Lowest total price for the whole stay, in the response currency, or null when unknown.",
931
+ )
932
+ website: str | None = Field(
933
+ default=None,
934
+ description="The hotel's own website. Populated whenever the provider has data for the entity. Present whenever the upstream returns this record.",
935
+ )
936
+
937
+
938
+ class GoogleHotelDetailsAmenitie(BaseModel):
939
+ model_config = ConfigDict(extra="allow")
940
+
941
+ available: bool | None = Field(
942
+ default=None,
943
+ description="Whether the hotel offers it. Populated whenever the provider has data for the entity. Present whenever the upstream returns this record.",
944
+ )
945
+ name: str = Field(description="Amenity name (e.g. Wi-Fi, Pool).")
946
+
947
+
948
+ class GoogleHotelDetailsPrice(BaseModel):
949
+ model_config = ConfigDict(extra="allow", populate_by_name=True)
950
+
951
+ price_per_night: float | None = Field(
952
+ default=None,
953
+ alias="pricePerNight",
954
+ description="Nightly price on this site, in the response currency. Populated whenever the provider has data for the entity. Present whenever the upstream returns this record.",
955
+ )
956
+ site: str = Field(description="Booking site name (e.g. Booking.com).")
957
+ total_price: float | None = Field(
958
+ default=None,
959
+ alias="totalPrice",
960
+ description="Total price for the stay on this site, or null when unknown.",
961
+ )
962
+ url: str | None = Field(
963
+ default=None,
964
+ description="Booking link for this offer. Populated whenever the provider has data for the entity. Present whenever the upstream returns this record.",
965
+ )
966
+
967
+
968
+ class GoogleHotelsData(BaseModel):
969
+ currency: str | None = Field(
970
+ default=None,
971
+ description="ISO 4217 currency code every price in this response is in. Populated whenever the provider has data for the entity. Present whenever the upstream returns this record.",
972
+ )
973
+ hotels: list[GoogleHotelsHotel] = Field(
974
+ description="Hotels matching the search, in Google's order. Populated whenever the provider has data for the entity."
975
+ )
976
+
977
+
978
+ class GoogleHotelsHotel(BaseModel):
979
+ model_config = ConfigDict(extra="allow", populate_by_name=True)
980
+
981
+ amenities: list[str] | None = Field(
982
+ default=None,
983
+ description="Highlighted amenities (e.g. Free Wi-Fi, Parking), or null when unknown.",
984
+ )
985
+ description: str | None = Field(
986
+ default=None,
987
+ description="Short description of the hotel, or null when unknown.",
988
+ )
989
+ images: list[str] | None = Field(
990
+ default=None, description="Preview photo URLs of the hotel."
991
+ )
992
+ latitude: float | None = Field(
993
+ default=None,
994
+ description="Latitude of the hotel. Populated whenever the provider has data for the entity. Present whenever the upstream returns this record.",
995
+ )
996
+ longitude: float | None = Field(
997
+ default=None,
998
+ description="Longitude of the hotel. Populated whenever the provider has data for the entity. Present whenever the upstream returns this record.",
999
+ )
1000
+ name: str = Field(description="Hotel name.")
1001
+ price_per_night: float | None = Field(
1002
+ default=None,
1003
+ alias="pricePerNight",
1004
+ description="Lowest nightly price for the requested dates and guests, in the response currency, or null when no price is offered. Populated whenever the provider has data for the entity. Present whenever the upstream returns this record.",
1005
+ )
1006
+ property_token: str = Field(
1007
+ alias="propertyToken",
1008
+ description="Google Hotels property ID. Pass it to google.hotel_details for this hotel's full record.",
1009
+ )
1010
+ rating: float | None = Field(
1011
+ default=None,
1012
+ description="Average guest rating out of 5, or null when the hotel has no ratings. Populated whenever the provider has data for the entity. Present whenever the upstream returns this record.",
1013
+ )
1014
+ reviews_count: int | None = Field(
1015
+ default=None,
1016
+ alias="reviewsCount",
1017
+ description="Number of guest reviews. Populated whenever the provider has data for the entity. Present whenever the upstream returns this record.",
1018
+ )
1019
+ stars: int | None = Field(
1020
+ default=None,
1021
+ description="Hotel star class (1-5), or null when the property has none.",
1022
+ )
1023
+ total_price: float | None = Field(
1024
+ default=None,
1025
+ alias="totalPrice",
1026
+ description="Lowest total price for the whole stay, in the response currency, or null when unknown.",
1027
+ )
1028
+
1029
+
371
1030
  class GoogleImagesData(BaseModel):
372
1031
  items: list[GoogleImagesItem] = Field(
373
1032
  description="Image result records: image URL, dimensions, title, and the source page it appears on. Populated whenever the provider has data for the entity."
@@ -739,6 +1398,50 @@ class GoogleNamespace:
739
1398
  )
740
1399
  return RunResult[GoogleAutocompleteData].model_validate(raw)
741
1400
 
1401
+ def hotel_details(
1402
+ self,
1403
+ *,
1404
+ options: RequestOptions | None = None,
1405
+ **input: Unpack[GoogleHotelDetailsInput],
1406
+ ) -> RunResult[GoogleHotelDetailsData]:
1407
+ """Google Hotel Details
1408
+
1409
+ Get one hotel from Google Hotels by its property ID: address, phone,
1410
+ website, rating, nightly price, prices from each booking site, amenities and
1411
+ check-in times as normalized JSON.
1412
+
1413
+ Price: $0.0015 per request.
1414
+
1415
+ Example:
1416
+ res = client.google.hotel_details(checkIn="2026-10-31", checkOut="2026-11-02", country="us", propertyToken="ChcImaG28Zbom8uuARoKL20vMDNncTd2NBAB")
1417
+ """
1418
+ raw = self._client._run_raw( # pyright: ignore[reportPrivateUsage]
1419
+ "google.hotel_details", dict(input), options
1420
+ )
1421
+ return RunResult[GoogleHotelDetailsData].model_validate(raw)
1422
+
1423
+ def hotels(
1424
+ self,
1425
+ *,
1426
+ options: RequestOptions | None = None,
1427
+ **input: Unpack[GoogleHotelsInput],
1428
+ ) -> RunResult[GoogleHotelsData]:
1429
+ """Google Hotels Search
1430
+
1431
+ Search Google Hotels by destination and dates and get hotels with their
1432
+ Google property ID, nightly price, rating, review count, coordinates, star
1433
+ class and photos as normalized JSON.
1434
+
1435
+ Price: $0.0015 per request.
1436
+
1437
+ Example:
1438
+ res = client.google.hotels(checkIn="2026-10-31", checkOut="2026-11-02", country="us", query="hotels near times square new york")
1439
+ """
1440
+ raw = self._client._run_raw( # pyright: ignore[reportPrivateUsage]
1441
+ "google.hotels", dict(input), options
1442
+ )
1443
+ return RunResult[GoogleHotelsData].model_validate(raw)
1444
+
742
1445
  def images(
743
1446
  self,
744
1447
  *,
@@ -1028,6 +1731,50 @@ class AsyncGoogleNamespace:
1028
1731
  )
1029
1732
  return RunResult[GoogleAutocompleteData].model_validate(raw)
1030
1733
 
1734
+ async def hotel_details(
1735
+ self,
1736
+ *,
1737
+ options: RequestOptions | None = None,
1738
+ **input: Unpack[GoogleHotelDetailsInput],
1739
+ ) -> RunResult[GoogleHotelDetailsData]:
1740
+ """Google Hotel Details
1741
+
1742
+ Get one hotel from Google Hotels by its property ID: address, phone,
1743
+ website, rating, nightly price, prices from each booking site, amenities and
1744
+ check-in times as normalized JSON.
1745
+
1746
+ Price: $0.0015 per request.
1747
+
1748
+ Example:
1749
+ res = client.google.hotel_details(checkIn="2026-10-31", checkOut="2026-11-02", country="us", propertyToken="ChcImaG28Zbom8uuARoKL20vMDNncTd2NBAB")
1750
+ """
1751
+ raw = await self._client._arun_raw( # pyright: ignore[reportPrivateUsage]
1752
+ "google.hotel_details", dict(input), options
1753
+ )
1754
+ return RunResult[GoogleHotelDetailsData].model_validate(raw)
1755
+
1756
+ async def hotels(
1757
+ self,
1758
+ *,
1759
+ options: RequestOptions | None = None,
1760
+ **input: Unpack[GoogleHotelsInput],
1761
+ ) -> RunResult[GoogleHotelsData]:
1762
+ """Google Hotels Search
1763
+
1764
+ Search Google Hotels by destination and dates and get hotels with their
1765
+ Google property ID, nightly price, rating, review count, coordinates, star
1766
+ class and photos as normalized JSON.
1767
+
1768
+ Price: $0.0015 per request.
1769
+
1770
+ Example:
1771
+ res = client.google.hotels(checkIn="2026-10-31", checkOut="2026-11-02", country="us", query="hotels near times square new york")
1772
+ """
1773
+ raw = await self._client._arun_raw( # pyright: ignore[reportPrivateUsage]
1774
+ "google.hotels", dict(input), options
1775
+ )
1776
+ return RunResult[GoogleHotelsData].model_validate(raw)
1777
+
1031
1778
  async def images(
1032
1779
  self,
1033
1780
  *,
@@ -3916,7 +3916,7 @@ class InstagramNamespace:
3916
3916
  List an Instagram account's reels by handle with cursor pagination (caption,
3917
3917
  plays, likes, comments).
3918
3918
 
3919
- Price: $0.0008 per request.
3919
+ Price: $0.00095 per request.
3920
3920
 
3921
3921
  Example:
3922
3922
  res = client.instagram.user_reels(handle="nasa")
@@ -5092,7 +5092,7 @@ class AsyncInstagramNamespace:
5092
5092
  List an Instagram account's reels by handle with cursor pagination (caption,
5093
5093
  plays, likes, comments).
5094
5094
 
5095
- Price: $0.0008 per request.
5095
+ Price: $0.00095 per request.
5096
5096
 
5097
5097
  Example:
5098
5098
  res = client.instagram.user_reels(handle="nasa")
File without changes
File without changes
File without changes
File without changes