scavio 0.20.1 → 0.21.1

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.
package/README.md CHANGED
@@ -1,14 +1,13 @@
1
1
  # Scavio
2
2
 
3
- TypeScript SDK for the [Scavio API](https://scavio.dev?utm_source=npm-scavio-js&utm_medium=package&utm_campaign=readme) — real-time web scraping
4
- and data extraction across 35 platforms on one API key, plus `extract()` to read
3
+ TypeScript SDK for the [Scavio API](https://scavio.dev?utm_source=npm-scavio-js&utm_medium=package&utm_campaign=readme) — real-time structured web
4
+ data across 36 platforms on one API key, plus `extract()` to read
5
5
  any URL as clean Markdown.
6
6
 
7
- Structured JSON in, structured JSON out. No proxies, no headless browsers, no
8
- per-site parsers to maintain.
7
+ Structured JSON in, structured JSON out. No per-site parsers to maintain.
9
8
 
10
9
  - **Search and SERP** — Google (organic, news, maps, shopping, flights, hotels, trends, AI Mode)
11
- - **E-commerce** — Amazon, Walmart, Costco, eBay, Target, Home Depot, TikTok Shop
10
+ - **E-commerce** — Amazon, Walmart, Costco, Mercado Libre, eBay, Target, Home Depot, TikTok Shop
12
11
  - **Real estate and travel** — Zillow, Redfin, Realtor.com, Rightmove, Booking, Airbnb, Tripadvisor
13
12
  - **Reviews and local** — Trustpilot, Yelp, G2, Capterra, Glassdoor, App Store, Google Play
14
13
  - **Jobs and companies** — Indeed, Glassdoor, SEC EDGAR, Companies House
@@ -93,11 +92,11 @@ Credits depend on `mode`, not on a flat per-call price: `normal` costs 1,
93
92
  `advanced` costs 1, `ultra` costs 2. Billing happens only on a successful
94
93
  extraction — a dead link, bot wall or timeout costs nothing.
95
94
 
96
- - `normal` is a plain datacenter fetch. Start here.
97
- - `advanced` renders the page in a headless browser. Use it when the content is
98
- built client-side.
99
- - `ultra` goes through residential IPs. Use it only when a bot wall blocks the
100
- other two.
95
+ - `normal` is the default. Start here.
96
+ - `advanced` renders the page's JavaScript. Use it when the content is built
97
+ client-side.
98
+ - `ultra` is the hardest-page tier. Use it only when a page blocks the other
99
+ two.
101
100
 
102
101
  `html` is the raw page. `markdown` is a readability extraction with the
103
102
  boilerplate stripped. `text` is that markdown flattened to plain text. URLs are
@@ -169,8 +168,8 @@ silently does nothing.
169
168
 
170
169
  #### Amazon changed in 0.12.0 (breaking)
171
170
 
172
- Amazon moved to a new upstream and the API now returns a normalized shape
173
- instead of the previous raw provider payload.
171
+ The Amazon API now returns a normalized shape instead of the previous raw
172
+ payload.
174
173
 
175
174
  - `search` returns `{query, page, total_results, total_results_text, count, products[], filters[], related_searches[]}`.
176
175
  Each product is `{asin, title, url, image, price, currency, rating, reviews_count, is_sponsored, position, badge, sales_volume, delivery{is_free, date, fastest_date}}`.
@@ -308,6 +307,53 @@ warehouses on us and 2 per warehouse on ca). The clearance price codes are the
308
307
  member-community decode of Costco shelf prices; Costco does not publish them,
309
308
  and only items Costco lists online are covered.
310
309
 
310
+ ### [Mercado Libre](https://scavio.dev/docs/mercadolibre-search?utm_source=npm-scavio-js&utm_medium=package&utm_campaign=readme)
311
+
312
+ Five endpoints, new in 0.21.0: `reviews` costs 1 credit, the other four 2. The
313
+ `best-sellers` endpoint is `bestSellers()`. Mexico (`mx`), Brazil (`br`,
314
+ Mercado Livre), Argentina (`ar`) and Colombia (`co`); prices come back in MXN,
315
+ BRL, ARS or COP. Chile is not supported. Docs: [search](https://scavio.dev/docs/mercadolibre-search?utm_source=npm-scavio-js&utm_medium=package&utm_campaign=readme), [product](https://scavio.dev/docs/mercadolibre-product?utm_source=npm-scavio-js&utm_medium=package&utm_campaign=readme), [reviews](https://scavio.dev/docs/mercadolibre-reviews?utm_source=npm-scavio-js&utm_medium=package&utm_campaign=readme), [questions](https://scavio.dev/docs/mercadolibre-questions?utm_source=npm-scavio-js&utm_medium=package&utm_campaign=readme), [best sellers](https://scavio.dev/docs/mercadolibre-best-sellers?utm_source=npm-scavio-js&utm_medium=package&utm_campaign=readme); overview at the [Mercado Libre API](https://scavio.dev/mercadolibre-api?utm_source=npm-scavio-js&utm_medium=package&utm_campaign=readme) page.
316
+
317
+ ```typescript
318
+ // Keyword search: about 48 rows per page, up to 42 pages.
319
+ const found = await client.mercadolibre.search({
320
+ country: "mx",
321
+ query: "iphone 15",
322
+ condition: "new",
323
+ free_shipping: true,
324
+ sort: "price_asc", // relevance (default), price_asc or price_desc
325
+ });
326
+
327
+ // A seller's catalogue: by numeric seller_id (filters and paging work), or by
328
+ // nickname (first page, unfiltered, plus the seller_id).
329
+ await client.mercadolibre.search({ country: "mx", seller_id: "527927603", min_discount: 20 });
330
+ await client.mercadolibre.search({ country: "mx", seller_nickname: "MERCADOLIBRE ELECTRONICA_MX" });
331
+
332
+ // One product or listing: buy-box seller with reputation, variations, star
333
+ // distribution, specs. Exactly one of url, product_id or item_id.
334
+ await client.mercadolibre.product({ product_id: "MLM1027172667" });
335
+
336
+ // Reviews, 15 per page, optionally by star rating (1 credit).
337
+ await client.mercadolibre.reviews({ product_id: "MLM1027172667", rating: 1 });
338
+
339
+ // Buyer questions with the seller's answers; page with next_offset.
340
+ await client.mercadolibre.questions({ item_id: "MLM3571336480" });
341
+
342
+ // Top 20 best sellers in a category (mx, ar or co; not Brazil).
343
+ await client.mercadolibre.bestSellers({ country: "mx", category_id: "MLM1055" });
344
+ ```
345
+
346
+ A query reaches about 2,000 results (42 pages of 48), so slice by price range,
347
+ condition or seller to go further. Units sold are lower bounds
348
+ (`sold_quantity_min`, e.g. "+1000 vendidos"), not exact counts, and sort is
349
+ relevance or price only. Mercado Libre may narrow a query to a category, brand
350
+ or line on its own, and Brazil and Argentina may auto-apply a "new" condition;
351
+ `auto_applied_filters` lists what it applied. `product` returns only the
352
+ buy-box seller. Reviews translated into the site's language keep
353
+ `original_text`. Questions carry answer dates but no question dates. A
354
+ zero-result search is an empty, billed page; an unknown product, item or seller
355
+ nickname, or a listing with no public questions, is a billed 404.
356
+
311
357
  ### YouTube
312
358
 
313
359
  Credit cost varies by endpoint: `transcript` costs 8; `streams` costs 3;
@@ -363,7 +409,7 @@ await client.youtube.channelResolve({ channel: "@mkbhd" }); // handle/URL -> id
363
409
  Every Reddit endpoint costs 1 credit.
364
410
 
365
411
  `search()` takes only `query` and `cursor` — there is no result-type or sort
366
- filter upstream, so anything else is dropped server-side. It returns
412
+ filter, so anything else is dropped server-side. It returns
367
413
  `data.results` with `next_cursor` and `has_more`. `post()` returns a flat post
368
414
  object under `data` and carries no comments; use `postComments()` for those.
369
415
  The subreddit and user feeds return `data.posts`.
@@ -449,9 +495,9 @@ Credit cost varies by endpoint: `job` costs 30; `personPosts`, `companyPosts`,
449
495
  `searchJobs` and `postComments` cost 10 per page; `person`, `personAbout`,
450
496
  `company` and `post` cost 1.
451
497
 
452
- > **Retired endpoints.** The upstream provider withdrew the datasets behind
453
- > `personContact`, `companyPeople`, `companyJobs`, `searchPeople` and
454
- > `searchPosts`. They remain callable but always return HTTP 410 and are never
498
+ > **Retired endpoints.** The LinkedIn data behind `personContact`,
499
+ > `companyPeople`, `companyJobs`, `searchPeople` and `searchPosts` is no longer
500
+ > available. They remain callable but always return HTTP 410 and are never
455
501
  > billed. `company()` returns `featured_employees` (a small sample of staff), and
456
502
  > `searchJobs()` with a company name substitutes for `companyJobs()`.
457
503
 
@@ -502,7 +548,7 @@ await client.tiktok.userFollowings({ sec_user_id: "abc123" });
502
548
  Every TikTok Shop endpoint costs 1 credit. Two limits to design around:
503
549
 
504
550
  - `product()` resolves only about 44% of the product ids returned by `search()`.
505
- Upstream has no detail data for the rest, so an HTTP 404 is a normal outcome, not an
551
+ TikTok Shop has no detail data for the rest, so an HTTP 404 is a normal outcome, not an
506
552
  error — skip the item instead of retrying. Search to product is not a reliable
507
553
  pipeline. `product()` **throws** `NotFoundError` on that 404 (there is no `data`
508
554
  field in the body to test), so a loop over search ids must catch it:
@@ -514,7 +560,7 @@ Every TikTok Shop endpoint costs 1 credit. Two limits to design around:
514
560
  try {
515
561
  const detail = await client.tiktokShop.product({ product_id: productId });
516
562
  } catch (e) {
517
- if (e instanceof NotFoundError) continue; // no detail upstream; skip
563
+ if (e instanceof NotFoundError) continue; // no detail data; skip
518
564
  throw e;
519
565
  }
520
566
  }
@@ -523,7 +569,7 @@ Every TikTok Shop endpoint costs 1 credit. Two limits to design around:
523
569
  `productReviews()` often works for ids `product()` cannot resolve: of 8 such ids
524
570
  tested, 8 returned HTTP 200 and 7 carried at least one review, so it is a useful
525
571
  fallback source of product detail.
526
- - `product()` does not return a price; upstream masks it on the product page. Exact
572
+ - `product()` does not return a price; TikTok masks it on the product page. Exact
527
573
  prices come from `search()`, `shopProducts()`, and `categoryProducts()`.
528
574
 
529
575
  ```typescript
@@ -566,9 +612,6 @@ Credit cost varies by endpoint, in three tiers:
566
612
  | 8 | `post`, `commentReplies` |
567
613
  | 10 | `profile`, `userReels`, `userTagged`, `userStories`, `postComments`, `searchUsers`, `searchHashtags`, `userFollowers`, `userFollowings` |
568
614
 
569
- The 10-credit endpoints run two upstream providers in parallel and bill both
570
- legs; the 8-credit ones have no fallback leg to hedge against.
571
-
572
615
  ```typescript
573
616
  // User profile
574
617
  await client.instagram.profile({ username: "instagram" });
@@ -600,8 +643,8 @@ await client.instagram.userFollowings({ username: "instagram" });
600
643
  ### Threads
601
644
 
602
645
  Six endpoints, and the credit cost is a function of the body: **2 credits when
603
- you address a user by `user_id`, 4 when you address them by `username`.** The
604
- upstream handle lookup is dead, so a handle buys a second call. Only `profile`,
646
+ you address a user by `user_id`, 4 when you address them by `username`.** A
647
+ handle needs an extra lookup, so it costs a second call. Only `profile`,
605
648
  `userPosts` and `userReplies` are username-keyed; `post`, `postComments` and
606
649
  `searchUsers` always cost 2.
607
650
 
@@ -732,7 +775,8 @@ const comps = await client.realtor.search({
732
775
  page_size: 200,
733
776
  });
734
777
 
735
- // Listing-text keyword watch, a radius search, or one agent's listings.
778
+ // Listing-text keyword watch (a listing must contain ALL the keywords, so each
779
+ // extra keyword narrows the results), a radius search, or one agent's listings.
736
780
  await client.realtor.search({ location: "Austin, TX", keywords: ["workshop"] });
737
781
  await client.realtor.search({ latitude: 30.27, longitude: -97.74, radius_miles: 5 });
738
782
  await client.realtor.search({ agent_id: "1918615" });
@@ -808,8 +852,8 @@ await client.booking.reviews({ hotel: "the-independente" });
808
852
  1 credit per call. `checkin` and `checkout` must be sent together — Booking
809
853
  ignores a lone check-in and prices its own date range. `hotel` and `reviews`
810
854
  take dates for the same reason: Booking prices a stay, and the response echoes
811
- whichever dates were used. `currency` defaults to USD; without it Booking prices
812
- off the proxy exit and two identical requests disagree. A search with neither
855
+ whichever dates were used. `currency` defaults to USD; without it Booking picks
856
+ a currency itself and two identical requests can disagree. A search with neither
813
857
  `destination` nor `dest_id` returns Booking's homepage and still costs a credit.
814
858
 
815
859
  ### Airbnb
@@ -861,7 +905,7 @@ await client.yelp.reviews({ business_id: "...", page: 2 }); // page 2, not 1
861
905
  ```
862
906
 
863
907
  2 credits per call. `location` is effectively required — without it Yelp
864
- geolocates off the proxy exit and the same request answers about a different
908
+ picks a location itself and the same request can answer about a different
865
909
  metro run to run. **Reviews page 1 is redundant**: it re-fetches the document
866
910
  `business()` already returned and costs another 2 credits, so start at page 2.
867
911
  Page size is fixed at 10 and a page past the last is a 404.
@@ -896,7 +940,7 @@ only exists inside Glassdoor's `/Overview/` URLs.
896
940
  const hits = await client.glassdoor.companies({ query: "Stripe" });
897
941
  const company = await client.glassdoor.company({ employer_id: "671932" });
898
942
 
899
- // Pass the URLs the company response returns - halves the upstream work
943
+ // Pass the URLs the company response returns - saves a lookup
900
944
  await client.glassdoor.reviews({ url: company.reviews_url as string });
901
945
  await client.glassdoor.salaries({ url: company.salaries_url as string });
902
946
  ```
@@ -904,8 +948,8 @@ await client.glassdoor.salaries({ url: company.salaries_url as string });
904
948
  1 credit per call. Glassdoor's login wall caps `reviews` at **three reviews per
905
949
  response** — there is deliberately no `page` param; move the window with
906
950
  `category` and `employment_status` and read `filtered_review_count` to see how
907
- many match. Addressing `reviews` or `salaries` by `employer_id` costs two
908
- upstream fetches because the slugs are case-sensitive and must be read off the
951
+ many match. Addressing `reviews` or `salaries` by `employer_id` needs an
952
+ extra lookup because the slugs are case-sensitive and must be read off the
909
953
  profile, so prefer the `reviews_url` / `salaries_url` the company response hands
910
954
  back. These endpoints are slow and flaky by nature (company about 3-47s, reviews
911
955
  about 75s, salaries about 41s) — raise `timeout` and keep retries on.
@@ -949,9 +993,9 @@ await client.g2.product({ product_id: "notion" });
949
993
  await client.g2.reviews({ product_id: "notion", page: 2, company_size: "enterprise" });
950
994
  ```
951
995
 
952
- **5 credits per call — the most expensive platform in the SDK**, because g2.com
953
- bills 25 upstream credits per fetch. Retries are deliberately conservative for
954
- that reason, and a bot wall arrives as a billed 200 rather than an error. G2
996
+ **5 credits per call — the most expensive platform in the SDK.** Retries are
997
+ deliberately conservative for that reason, and a blocked page arrives as a
998
+ billed 200 rather than an error. G2
955
999
  loads review text in a separate frame, so `product` carries no reviews — call
956
1000
  `reviews`, which is also the only place with exact per-star counts, pros/cons by
957
1001
  theme, and company-size / role / industry / region facets.
@@ -1032,9 +1076,9 @@ await client.sec.search({ query: "climate risk", form: "10-K" });
1032
1076
  ```
1033
1077
 
1034
1078
  1 credit per call, including `include_history: true`, which is the one call that
1035
- can buy up to 10 upstream fetches. Both `cik` and `ticker` accept either
1036
- spelling. XBRL concept tags are **case-sensitive** — `netincomeloss` is a 404
1037
- upstream, so use `facts()` to see what a filer actually reports. EDGAR's
1079
+ can take up to 10 lookups. Both `cik` and `ticker` accept either
1080
+ spelling. XBRL concept tags are **case-sensitive** — `netincomeloss` is a 404,
1081
+ so use `facts()` to see what a filer actually reports. EDGAR's
1038
1082
  "recent" block is not a fixed window: a decade for a quiet filer, about a year
1039
1083
  for a prolific one.
1040
1084
 
@@ -1132,7 +1176,7 @@ All error classes:
1132
1176
  | `BadRequestError` | 400, 422 | Invalid request parameters |
1133
1177
  | `InvalidAPIKeyError` | 401 | Invalid API key |
1134
1178
  | `InsufficientCreditsError` | 402 | No credits remaining |
1135
- | `NotFoundError` | 404 | No data upstream for that id (see TikTok Shop above) |
1179
+ | `NotFoundError` | 404 | No data for that id (see TikTok Shop above) |
1136
1180
  | `RateLimitError` | 429 | Rate limit exceeded |
1137
1181
  | `ScavioAPIError` | other | Catch-all (has `.statusCode`) |
1138
1182
 
@@ -1162,7 +1206,7 @@ MIT
1162
1206
 
1163
1207
  [Scavio](https://scavio.dev?utm_source=npm-scavio-js&utm_medium=package&utm_campaign=readme) is a unified web data and
1164
1208
  [search API for AI agents](https://scavio.dev/search-api-for-ai-agents?utm_source=npm-scavio-js&utm_medium=package&utm_campaign=readme) — one API
1165
- key, structured JSON, no proxies or browser farms to run. It is a real-time
1209
+ key, structured JSON. It is a real-time
1166
1210
  [Tavily alternative](https://scavio.dev/alternatives/tavily?utm_source=npm-scavio-js&utm_medium=package&utm_campaign=readme) and
1167
1211
  [SerpAPI alternative](https://scavio.dev/alternatives/serpapi?utm_source=npm-scavio-js&utm_medium=package&utm_campaign=readme), and with
1168
1212
  `extract()` it also covers the read-any-URL job people reach for Firecrawl to do.
@@ -1170,7 +1214,7 @@ key, structured JSON, no proxies or browser farms to run. It is a real-time
1170
1214
  What teams build on it:
1171
1215
 
1172
1216
  - **SERP and answer engines** — [Google Search API](https://scavio.dev/google-search-api?utm_source=npm-scavio-js&utm_medium=package&utm_campaign=readme) for organic results, news, images, maps and the knowledge graph
1173
- - **Price and catalog monitoring** — [Amazon Product API](https://scavio.dev/amazon-product-api?utm_source=npm-scavio-js&utm_medium=package&utm_campaign=readme), [Walmart Product API](https://scavio.dev/walmart-product-api?utm_source=npm-scavio-js&utm_medium=package&utm_campaign=readme), eBay, Target and Home Depot product, review and seller data
1217
+ - **Price and catalog monitoring** — [Amazon Product API](https://scavio.dev/amazon-product-api?utm_source=npm-scavio-js&utm_medium=package&utm_campaign=readme), [Walmart Product API](https://scavio.dev/walmart-product-api?utm_source=npm-scavio-js&utm_medium=package&utm_campaign=readme), eBay, Target and Home Depot product, review and seller data, Mercado Libre listings, reviews and best sellers in Mexico, Brazil, Argentina and Colombia
1174
1218
  - **Real estate and travel pipelines** — Zillow, Redfin and Realtor.com listings and market stats, Rightmove UK listings and England and Wales sold prices since 1995, Booking, Airbnb and Tripadvisor rates and reviews
1175
1219
  - **Review mining and competitive research** — Trustpilot, Yelp, G2, Capterra, Glassdoor, App Store and Google Play reviews on one shape
1176
1220
  - **Recruiting and company intelligence** — Indeed jobs, Glassdoor salaries, SEC EDGAR filings and XBRL facts, UK Companies House officers and filing history
package/dist/index.cjs CHANGED
@@ -43,6 +43,7 @@ __export(index_exports, {
43
43
  KuaishouNamespace: () => KuaishouNamespace,
44
44
  LinkedInNamespace: () => LinkedInNamespace,
45
45
  MAX_REQUESTS_PER_SECOND: () => MAX_REQUESTS_PER_SECOND,
46
+ MercadoLibreNamespace: () => MercadoLibreNamespace,
46
47
  MetaAdsNamespace: () => MetaAdsNamespace,
47
48
  MissingAPIKeyError: () => MissingAPIKeyError,
48
49
  NotFoundError: () => NotFoundError,
@@ -202,7 +203,7 @@ function parseRetryAfter(header) {
202
203
  var BASE_URL = "https://api.scavio.dev";
203
204
  var DEFAULT_TIMEOUT = 3e4;
204
205
  var DEFAULT_MAX_RETRIES = 2;
205
- var SDK_VERSION = true ? "0.20.1" : "0.0.0";
206
+ var SDK_VERSION = true ? "0.21.1" : "0.0.0";
206
207
  var USER_AGENT = `scavio-js/${SDK_VERSION}`;
207
208
  function isServerRuntime() {
208
209
  const g = globalThis;
@@ -2721,6 +2722,76 @@ var RightmoveNamespace = class {
2721
2722
  }
2722
2723
  };
2723
2724
 
2725
+ // src/namespaces/mercadolibre.ts
2726
+ var MercadoLibreNamespace = class {
2727
+ constructor(client) {
2728
+ this.client = client;
2729
+ }
2730
+ client;
2731
+ /**
2732
+ * Search Mercado Libre listings in Mexico, Brazil (Mercado Livre), Argentina
2733
+ * or Colombia by keyword or seller, with condition, price range, discount,
2734
+ * free shipping, Full fulfillment, official stores and interest-free
2735
+ * installment filters, sorted by relevance or price. Each row has price,
2736
+ * list price, discount, installments, seller and official-store flag where
2737
+ * shown, rating, units sold as a lower bound ("at least 500"), shipping
2738
+ * flags, a sponsored flag and catalog ids. About 48 rows per page and 42
2739
+ * pages (about 2,000 results) per query.
2740
+ *
2741
+ * Costs 2 credits.
2742
+ */
2743
+ async search(options) {
2744
+ return this.client._post("/api/v1/mercadolibre/search", options);
2745
+ }
2746
+ /**
2747
+ * One Mercado Libre catalog product or listing: title, price, list price,
2748
+ * installments, promotions, the buy-box seller with reputation level and
2749
+ * seller tier, stock, shipping, rating with its star distribution,
2750
+ * variations with sibling product ids, specs, description, pictures and
2751
+ * categories. Only the buy-box seller is returned; units sold is a lower
2752
+ * bound. Some fields are null where the page omits them. Pass exactly one of
2753
+ * url, product_id or item_id; the id prefix (MLM, MLB, MLA, MCO) sets the
2754
+ * country.
2755
+ *
2756
+ * Costs 2 credits.
2757
+ */
2758
+ async product(options) {
2759
+ return this.client._post("/api/v1/mercadolibre/product", options);
2760
+ }
2761
+ /**
2762
+ * One page of up to 15 Mercado Libre product reviews (page until a page
2763
+ * comes back empty), optionally filtered by star rating: rating, text, the
2764
+ * original text when Mercado Libre translated it, exact date, likes, the
2765
+ * review's country and photos. Catalog products pool reviews from several
2766
+ * countries. Totals and the star distribution come from product().
2767
+ *
2768
+ * Costs 1 credit.
2769
+ */
2770
+ async reviews(options) {
2771
+ return this.client._post("/api/v1/mercadolibre/reviews", options);
2772
+ }
2773
+ /**
2774
+ * A page of buyer questions on a Mercado Libre listing with the seller's
2775
+ * answers and answer dates (Mercado Libre shows no question dates). Page
2776
+ * through with next_offset. A listing with no public questions returns 404.
2777
+ *
2778
+ * Costs 2 credits.
2779
+ */
2780
+ async questions(options) {
2781
+ return this.client._post("/api/v1/mercadolibre/questions", options);
2782
+ }
2783
+ /**
2784
+ * The ranked top 20 best sellers in a Mercado Libre category in Mexico,
2785
+ * Argentina or Colombia, with price, discount, installments, rating, units
2786
+ * sold as a lower bound and seller where shown. Not available for Brazil.
2787
+ *
2788
+ * Costs 2 credits.
2789
+ */
2790
+ async bestSellers(options) {
2791
+ return this.client._post("/api/v1/mercadolibre/best-sellers", options);
2792
+ }
2793
+ };
2794
+
2724
2795
  // src/client.ts
2725
2796
  var DEFAULT_MAX_REQUESTS_PER_SECOND = 1;
2726
2797
  var MAX_REQUESTS_PER_SECOND = 50;
@@ -2760,6 +2831,7 @@ var Scavio = class {
2760
2831
  trustpilot;
2761
2832
  realtor;
2762
2833
  rightmove;
2834
+ mercadolibre;
2763
2835
  apiKey;
2764
2836
  baseUrl;
2765
2837
  timeout;
@@ -2815,6 +2887,7 @@ var Scavio = class {
2815
2887
  this.trustpilot = new TrustpilotNamespace(this);
2816
2888
  this.realtor = new RealtorNamespace(this);
2817
2889
  this.rightmove = new RightmoveNamespace(this);
2890
+ this.mercadolibre = new MercadoLibreNamespace(this);
2818
2891
  }
2819
2892
  /** @internal */
2820
2893
  async _post(path, body) {
@@ -2896,6 +2969,7 @@ var Scavio = class {
2896
2969
  KuaishouNamespace,
2897
2970
  LinkedInNamespace,
2898
2971
  MAX_REQUESTS_PER_SECOND,
2972
+ MercadoLibreNamespace,
2899
2973
  MetaAdsNamespace,
2900
2974
  MissingAPIKeyError,
2901
2975
  NotFoundError,